# Import All required libaries
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
import seaborn as sns
import statsmodels.api as sm
from bs4 import BeautifulSoup
import requests
from time import sleep
import sklearn
from sklearn import neighbors, tree, ensemble, naive_bayes, svm
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error
from sklearn.linear_model import LogisticRegression
from sklearn import linear_model
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import GridSearchCV
from sklearn.neighbors import KNeighborsClassifier
# *** Decision Tree; Random Forest
from sklearn import tree
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import RandomForestClassifier
# *** Naive Bayes
from sklearn.naive_bayes import GaussianNB
# *** SVM classifier
from sklearn.svm import SVC
# -------- metrics:
from sklearn import metrics
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score, confusion_matrix
from sklearn.metrics import make_scorer
#Players Stats URLs Seasson 2021-2022
url_players_stats = "https://fbref.com/en/comps/Big5/stats/players/Big-5-European-Leagues-Stats"
url_player_passing = "https://fbref.com/en/comps/Big5/passing/players/Big-5-European-Leagues-Stats"
url_players_shooting = "https://fbref.com/en/comps/Big5/shooting/players/Big-5-European-Leagues-Stats"
url_player_creation = "https://fbref.com/en/comps/Big5/gca/players/Big-5-European-Leagues-Stats"
url_player_defense = "https://fbref.com/en/comps/Big5/defense/players/Big-5-European-Leagues-Stats"
url_players_miscellaneous = "https://fbref.com/en/comps/Big5/misc/players/Big-5-European-Leagues-Stats"
url_list=[url_players_stats, url_player_passing, url_players_shooting, url_player_creation, url_player_defense, url_players_miscellaneous]
# Function to Check url status
def check_url_status(url):
response_stats = requests.get(url)
if((response_stats.status_code) == 200):
status = "OK"
else:
status = "ERROR"
return status
# Check all URls Response code
for i in range(len(url_list)):
url_status = check_url_status(url_list[i])
print("status:",url_status, "-" ,url_list[i])
status: OK - https://fbref.com/en/comps/Big5/stats/players/Big-5-European-Leagues-Stats status: OK - https://fbref.com/en/comps/Big5/passing/players/Big-5-European-Leagues-Stats status: OK - https://fbref.com/en/comps/Big5/shooting/players/Big-5-European-Leagues-Stats status: OK - https://fbref.com/en/comps/Big5/gca/players/Big-5-European-Leagues-Stats status: OK - https://fbref.com/en/comps/Big5/defense/players/Big-5-European-Leagues-Stats status: OK - https://fbref.com/en/comps/Big5/misc/players/Big-5-European-Leagues-Stats
# Create Soup and table for all URLs
soup_stats = []
soup_pass = []
soup_shoot =[]
soup_creation = []
soup_defense = []
soup_miscellaneous = []
table_stats = []
table_pass = []
table_shoot = []
table_creation = []
table_defense = []
table_miscellaneous = []
soup_list = [soup_stats, soup_pass, soup_shoot, soup_creation, soup_defense, soup_miscellaneous]
table_list = [table_stats, table_pass, table_shoot, table_creation, table_defense, table_miscellaneous]
for i in range(len(soup_list)):
response_stats = requests.get(url_list[i])
print(url_list[i])
soup_list[i] = BeautifulSoup(response_stats.text,"html.parser")
if(soup_list[i] == None):
print("Unable to Create soup")
else:
print("Soup Created")
table_list[i] = soup_list[i].find("table")
soup_stats = soup_list[0]
soup_pass = soup_list[1]
soup_shoot =soup_list[2]
soup_creation = soup_list[3]
soup_defense = soup_list[4]
soup_miscellaneous = soup_list[5]
table_stats = table_list[0]
table_pass = table_list[1]
table_shoot = table_list[2]
table_creation = table_list[3]
table_defense = table_list[4]
table_miscellaneous = table_list[5]
https://fbref.com/en/comps/Big5/stats/players/Big-5-European-Leagues-Stats Soup Created https://fbref.com/en/comps/Big5/passing/players/Big-5-European-Leagues-Stats Soup Created https://fbref.com/en/comps/Big5/shooting/players/Big-5-European-Leagues-Stats Soup Created https://fbref.com/en/comps/Big5/gca/players/Big-5-European-Leagues-Stats Soup Created https://fbref.com/en/comps/Big5/defense/players/Big-5-European-Leagues-Stats Soup Created https://fbref.com/en/comps/Big5/misc/players/Big-5-European-Leagues-Stats Soup Created
# Create DataFrame for Players Main Stats (1/6)
# table colums from inspect url
headers_stats = ['player_name','nationality','position','team','league','age','birth_year','match_played','match_starts','minutes_played','minutes_played_by_90m','goals','assists','goals_no_pen','goals_pen','pens_att','yellow_card','red_cards','goals_per_90','assists_per_90','goals_and_assists_per_90','goals_no_pen_per_90','goals_no_pen_and_assists_per_90','expected_goals','expected_goals_no_pen','expected_assists','expected_goals_and_assists_no_pen','expected_goals_per_90','expected_assists_per_90','expected_goals_and_assists_per_90','expected_goals_no_pen_per_90','expected_goals_and_assists_no_pen_per_90','matches']
df_stats = pd.DataFrame(columns=headers_stats)
i=0
for j in table_stats.find_all('tr')[1:]:
row_data = j.find_all('td')
row = [tr.text for tr in row_data]
if row != []:
#print(row)
df_stats.loc[i] = row
i=i+1
df_stats
| player_name | nationality | position | team | league | age | birth_year | match_played | match_starts | minutes_played | ... | expected_goals | expected_goals_no_pen | expected_assists | expected_goals_and_assists_no_pen | expected_goals_per_90 | expected_assists_per_90 | expected_goals_and_assists_per_90 | expected_goals_no_pen_per_90 | expected_goals_and_assists_no_pen_per_90 | matches | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | Max Aarons | eng ENG | DF | Norwich City | eng Premier League | 21 | 2000 | 34 | 32 | 2,881 | ... | 0.7 | 0.7 | 1.4 | 2.1 | 0.02 | 0.04 | 0.07 | 0.02 | 0.07 | Matches |
| 1 | Yunis Abdelhamid | ma MAR | DF | Reims | fr Ligue 1 | 33 | 1987 | 34 | 34 | 2,983 | ... | 1.2 | 1.2 | 0.8 | 2.1 | 0.04 | 0.02 | 0.06 | 0.04 | 0.06 | Matches |
| 2 | Salis Abdul Samed | gh GHA | MF | Clermont Foot | fr Ligue 1 | 21 | 2000 | 31 | 29 | 2,462 | ... | 0.8 | 0.8 | 1.1 | 1.9 | 0.03 | 0.04 | 0.07 | 0.03 | 0.07 | Matches |
| 3 | Laurent Abergel | fr FRA | MF | Lorient | fr Ligue 1 | 28 | 1993 | 34 | 34 | 2,956 | ... | 2.0 | 2.0 | 2.9 | 4.9 | 0.06 | 0.09 | 0.15 | 0.06 | 0.15 | Matches |
| 4 | Charles Abi | fr FRA | FW | Saint-Étienne | fr Ligue 1 | 21 | 2000 | 1 | 1 | 45 | ... | 0.0 | 0.0 | 0.0 | 0.0 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | Matches |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 2916 | Martín Zubimendi | es ESP | MF | Real Sociedad | es La Liga | 22 | 1999 | 36 | 26 | 2,591 | ... | 2.0 | 2.0 | 1.0 | 3.0 | 0.07 | 0.04 | 0.10 | 0.07 | 0.10 | Matches |
| 2917 | Szymon Żurkowski | pl POL | MF | Empoli | it Serie A | 23 | 1997 | 35 | 29 | 2,307 | ... | 4.1 | 4.1 | 1.5 | 5.5 | 0.16 | 0.06 | 0.22 | 0.16 | 0.22 | Matches |
| 2918 | Martin Ødegaard | no NOR | MF | Arsenal | eng Premier League | 22 | 1998 | 36 | 32 | 2,785 | ... | 4.8 | 4.8 | 6.8 | 11.6 | 0.16 | 0.22 | 0.38 | 0.16 | 0.38 | Matches |
| 2919 | Milan Đurić | ba BIH | FW | Salernitana | it Serie A | 31 | 1990 | 33 | 23 | 2,165 | ... | 5.8 | 5.0 | 3.1 | 8.1 | 0.24 | 0.13 | 0.37 | 0.21 | 0.34 | Matches |
| 2920 | Filip Đuričić | rs SRB | MF,FW | Sassuolo | it Serie A | 29 | 1992 | 12 | 9 | 671 | ... | 2.0 | 2.0 | 1.3 | 3.3 | 0.27 | 0.17 | 0.44 | 0.27 | 0.44 | Matches |
2921 rows × 33 columns
# Create DataFrame for Players Passing Stats (2/6)
# table colums from inspect url
headers_passing = ['player_name','nationality','position','team','league','age','birth_year','minutes_played_by_90m','total_pass_completed','total_pass_attempted','pass_completed_percentage','total_pass_dist','total_pass_dist_forward','short_pass_completed','short_pass_attempted','short_pass_percentage','mid_pass_completed','mid_pass_attempted','mid_pass_percentage','long_pass_completed','long_pass_attempted','long_pass_percentage','assists','expected_assists','assists_minus_expected_assists','pass_lead_to_shot','pass_30_court(na)','pass_18_court(na)','crosses_18_court(na)','progressive_pass(na)','matches']
df_passing = pd.DataFrame(columns=headers_passing)
i=0
for j in table_pass.find_all('tr')[1:]:
row_data = j.find_all('td')
row = [tr.text for tr in row_data]
if row != []:
#print(row)
df_passing.loc[i] = row
i=i+1
df_passing
| player_name | nationality | position | team | league | age | birth_year | minutes_played_by_90m | total_pass_completed | total_pass_attempted | ... | long_pass_percentage | assists | expected_assists | assists_minus_expected_assists | pass_lead_to_shot | pass_30_court(na) | pass_18_court(na) | crosses_18_court(na) | progressive_pass(na) | matches | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | Max Aarons | eng ENG | DF | Norwich City | eng Premier League | 21 | 2000 | 32.0 | 1087 | 1440 | ... | 45.2 | 2 | 1.4 | +0.6 | 19 | 50 | 36 | 8 | 94 | Matches |
| 1 | Yunis Abdelhamid | ma MAR | DF | Reims | fr Ligue 1 | 33 | 1987 | 33.1 | 1281 | 1555 | ... | 61.7 | 0 | 0.8 | -0.8 | 8 | 81 | 6 | 0 | 90 | Matches |
| 2 | Salis Abdul Samed | gh GHA | MF | Clermont Foot | fr Ligue 1 | 21 | 2000 | 27.4 | 1532 | 1671 | ... | 86.0 | 0 | 1.1 | -1.1 | 15 | 77 | 13 | 1 | 81 | Matches |
| 3 | Laurent Abergel | fr FRA | MF | Lorient | fr Ligue 1 | 28 | 1993 | 32.8 | 1334 | 1635 | ... | 66.6 | 2 | 2.9 | -0.9 | 30 | 127 | 19 | 6 | 137 | Matches |
| 4 | Charles Abi | fr FRA | FW | Saint-Étienne | fr Ligue 1 | 21 | 2000 | 0.5 | 2 | 6 | ... | 0 | 0.0 | 0.0 | 0 | 0 | 0 | 0 | 0 | Matches | |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 2916 | Martín Zubimendi | es ESP | MF | Real Sociedad | es La Liga | 22 | 1999 | 28.8 | 1243 | 1453 | ... | 70.6 | 1 | 1.0 | 0.0 | 15 | 121 | 10 | 1 | 106 | Matches |
| 2917 | Szymon Żurkowski | pl POL | MF | Empoli | it Serie A | 23 | 1997 | 25.6 | 733 | 915 | ... | 60.4 | 2 | 1.5 | +0.5 | 19 | 53 | 20 | 4 | 68 | Matches |
| 2918 | Martin Ødegaard | no NOR | MF | Arsenal | eng Premier League | 22 | 1998 | 30.9 | 1355 | 1598 | ... | 68.6 | 4 | 6.8 | -2.8 | 76 | 100 | 65 | 4 | 158 | Matches |
| 2919 | Milan Đurić | ba BIH | FW | Salernitana | it Serie A | 31 | 1990 | 24.1 | 427 | 682 | ... | 64.3 | 4 | 3.1 | +0.9 | 32 | 18 | 4 | 0 | 30 | Matches |
| 2920 | Filip Đuričić | rs SRB | MF,FW | Sassuolo | it Serie A | 29 | 1992 | 7.5 | 184 | 226 | ... | 85.7 | 1 | 1.3 | -0.3 | 11 | 13 | 18 | 0 | 34 | Matches |
2921 rows × 31 columns
# Create DataFrame for Players Shooting Stats (3/6)
# table colums from inspect url
headers_shooting = ['player_name','nationality','position','team','league','age','birth_year','match_by_90m','goals','total_shots','shots_on_target','shots_on_target_percent','total_shots_per_90m','shots_on_target_per_90m','goals_per_shots','goals_per_shot_on_target','average_shot_distance_meter','free_kick_shots','pens_made','pens_attempted','expected_goals','expected_goals_no_pens','expected_goal_per_shot_no_pens','goals_minus_expected_goals','non_pens_goals_minus_expected_pens_goals','matches']
df_shooting = pd.DataFrame(columns=headers_shooting)
i=0
for j in table_shoot.find_all('tr')[1:]:
row_data = j.find_all('td')
row = [tr.text for tr in row_data]
if row != []:
#print(row)
df_shooting.loc[i] = row
i=i+1
df_shooting
| player_name | nationality | position | team | league | age | birth_year | match_by_90m | goals | total_shots | ... | average_shot_distance_meter | free_kick_shots | pens_made | pens_attempted | expected_goals | expected_goals_no_pens | expected_goal_per_shot_no_pens | goals_minus_expected_goals | non_pens_goals_minus_expected_pens_goals | matches | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | Max Aarons | eng ENG | DF | Norwich City | eng Premier League | 21 | 2000 | 32.0 | 0 | 13 | ... | 20.5 | 0 | 0 | 0 | 0.7 | 0.7 | 0.05 | -0.7 | -0.7 | Matches |
| 1 | Yunis Abdelhamid | ma MAR | DF | Reims | fr Ligue 1 | 33 | 1987 | 33.1 | 2 | 18 | ... | 18.7 | 0 | 0 | 0 | 1.2 | 1.2 | 0.07 | +0.8 | +0.8 | Matches |
| 2 | Salis Abdul Samed | gh GHA | MF | Clermont Foot | fr Ligue 1 | 21 | 2000 | 27.4 | 1 | 18 | ... | 20.3 | 0 | 0 | 0 | 0.8 | 0.8 | 0.04 | +0.2 | +0.2 | Matches |
| 3 | Laurent Abergel | fr FRA | MF | Lorient | fr Ligue 1 | 28 | 1993 | 32.8 | 0 | 30 | ... | 22.6 | 0 | 0 | 0 | 2.0 | 2.0 | 0.07 | -2.0 | -2.0 | Matches |
| 4 | Charles Abi | fr FRA | FW | Saint-Étienne | fr Ligue 1 | 21 | 2000 | 0.5 | 0 | 0 | ... | 0 | 0 | 0 | 0.0 | 0.0 | 0.0 | 0.0 | Matches | ||
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 2916 | Martín Zubimendi | es ESP | MF | Real Sociedad | es La Liga | 22 | 1999 | 28.8 | 2 | 21 | ... | 13.7 | 0 | 0 | 0 | 2.0 | 2.0 | 0.09 | 0.0 | 0.0 | Matches |
| 2917 | Szymon Żurkowski | pl POL | MF | Empoli | it Serie A | 23 | 1997 | 25.6 | 6 | 47 | ... | 18.8 | 0 | 0 | 0 | 4.1 | 4.1 | 0.09 | +1.9 | +1.9 | Matches |
| 2918 | Martin Ødegaard | no NOR | MF | Arsenal | eng Premier League | 22 | 1998 | 30.9 | 7 | 53 | ... | 20.1 | 12 | 0 | 0 | 4.8 | 4.8 | 0.09 | +2.2 | +2.2 | Matches |
| 2919 | Milan Đurić | ba BIH | FW | Salernitana | it Serie A | 31 | 1990 | 24.1 | 5 | 50 | ... | 10.1 | 0 | 1 | 1 | 5.8 | 5.0 | 0.10 | -0.8 | -1.0 | Matches |
| 2920 | Filip Đuričić | rs SRB | MF,FW | Sassuolo | it Serie A | 29 | 1992 | 7.5 | 2 | 18 | ... | 15.7 | 0 | 0 | 0 | 2.0 | 2.0 | 0.11 | 0.0 | 0.0 | Matches |
2921 rows × 26 columns
# Create DataFrame for Players Goals Creation Stats (4/6)
# table colums from inspect url
headers_creation = ['player_name','nationality','position','team','league','age','birth_year','minutes_played_by_90m','total_shots_creation','shot_creation_by_90m','total_success_pass','total_miss_pass','total_success_dribble','total_shots_lead_to_attempt','total_earned_fouls','defense_action_lead_to_attempt','total_goal_creation','goal_creation_by_90m','total_pass_lead_to_goal','total_miss_pass_lead_to_goal','total_dribble_lead_to_goal','total_shots_lead_to_goal','total_earned_fould_lead_to_goal','defense_action_lead_to_goal','matches']
df_creation = pd.DataFrame(columns=headers_creation)
i=0
for j in table_creation.find_all('tr')[1:]:
row_data = j.find_all('td')
row = [tr.text for tr in row_data]
if row != []:
#print(row)
df_creation.loc[i] = row
i=i+1
df_creation
| player_name | nationality | position | team | league | age | birth_year | minutes_played_by_90m | total_shots_creation | shot_creation_by_90m | ... | defense_action_lead_to_attempt | total_goal_creation | goal_creation_by_90m | total_pass_lead_to_goal | total_miss_pass_lead_to_goal | total_dribble_lead_to_goal | total_shots_lead_to_goal | total_earned_fould_lead_to_goal | defense_action_lead_to_goal | matches | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | Max Aarons | eng ENG | DF | Norwich City | eng Premier League | 21 | 2000 | 32.0 | 38 | 1.19 | ... | 0 | 5 | 0.16 | 5 | 0 | 0 | 0 | 0 | 0 | Matches |
| 1 | Yunis Abdelhamid | ma MAR | DF | Reims | fr Ligue 1 | 33 | 1987 | 33.1 | 21 | 0.63 | ... | 3 | 1 | 0.03 | 0 | 0 | 1 | 0 | 0 | 0 | Matches |
| 2 | Salis Abdul Samed | gh GHA | MF | Clermont Foot | fr Ligue 1 | 21 | 2000 | 27.4 | 40 | 1.46 | ... | 2 | 1 | 0.04 | 1 | 0 | 0 | 0 | 0 | 0 | Matches |
| 3 | Laurent Abergel | fr FRA | MF | Lorient | fr Ligue 1 | 28 | 1993 | 32.8 | 66 | 2.01 | ... | 6 | 5 | 0.15 | 4 | 0 | 0 | 0 | 1 | 0 | Matches |
| 4 | Charles Abi | fr FRA | FW | Saint-Étienne | fr Ligue 1 | 21 | 2000 | 0.5 | 0 | 0.00 | ... | 0 | 0 | 0.00 | 0 | 0 | 0 | 0 | 0 | 0 | Matches |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 2916 | Martín Zubimendi | es ESP | MF | Real Sociedad | es La Liga | 22 | 1999 | 28.8 | 34 | 1.18 | ... | 3 | 1 | 0.03 | 1 | 0 | 0 | 0 | 0 | 0 | Matches |
| 2917 | Szymon Żurkowski | pl POL | MF | Empoli | it Serie A | 23 | 1997 | 25.6 | 60 | 2.34 | ... | 0 | 4 | 0.16 | 3 | 0 | 0 | 1 | 0 | 0 | Matches |
| 2918 | Martin Ødegaard | no NOR | MF | Arsenal | eng Premier League | 22 | 1998 | 30.9 | 134 | 4.33 | ... | 1 | 12 | 0.39 | 12 | 0 | 0 | 0 | 0 | 0 | Matches |
| 2919 | Milan Đurić | ba BIH | FW | Salernitana | it Serie A | 31 | 1990 | 24.1 | 56 | 2.33 | ... | 0 | 8 | 0.33 | 5 | 0 | 0 | 2 | 1 | 0 | Matches |
| 2920 | Filip Đuričić | rs SRB | MF,FW | Sassuolo | it Serie A | 29 | 1992 | 7.5 | 23 | 3.08 | ... | 1 | 2 | 0.27 | 2 | 0 | 0 | 0 | 0 | 0 | Matches |
2921 rows × 25 columns
# Create DataFrame for Players Defensive Stats (5/6)
# table colums from inspect url
headers_defense = ['player_name','nationality','position','team','league','age','birth_year','minutes_played_by_90m','total_tackels','total_tackels_won','total_defensive_tackels','total_mid_tackels','total_attack_tackels','total_dribblers_tackled','total_dribbles_contested','dribbles_tackeld_by_percentage','total_dribbled_past','total_pressures','total_successful_pressures','successful_pressure_percentage','total_pressure_defense','total_pressure_mid','total_pressure_attack','total_blocks','total_shots_blocked','total_shots_saved','total_passes_blocked','total_interceptions','total_tackels_plus_interceptions','total_clearances','total_mistakes','matches']
df_defense = pd.DataFrame(columns=headers_defense)
i=0
for j in table_defense.find_all('tr')[1:]:
row_data = j.find_all('td')
row = [tr.text for tr in row_data]
if row != []:
#print(row)
df_defense.loc[i] = row
i=i+1
df_defense
| player_name | nationality | position | team | league | age | birth_year | minutes_played_by_90m | total_tackels | total_tackels_won | ... | total_pressure_attack | total_blocks | total_shots_blocked | total_shots_saved | total_passes_blocked | total_interceptions | total_tackels_plus_interceptions | total_clearances | total_mistakes | matches | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | Max Aarons | eng ENG | DF | Norwich City | eng Premier League | 21 | 2000 | 32.0 | 69 | 37 | ... | 39 | 86 | 22 | 1 | 64 | 56 | 125 | 70 | 0 | Matches |
| 1 | Yunis Abdelhamid | ma MAR | DF | Reims | fr Ligue 1 | 33 | 1987 | 33.1 | 62 | 46 | ... | 29 | 62 | 26 | 2 | 36 | 103 | 165 | 106 | 0 | Matches |
| 2 | Salis Abdul Samed | gh GHA | MF | Clermont Foot | fr Ligue 1 | 21 | 2000 | 27.4 | 55 | 34 | ... | 108 | 27 | 1 | 0 | 26 | 51 | 106 | 15 | 0 | Matches |
| 3 | Laurent Abergel | fr FRA | MF | Lorient | fr Ligue 1 | 28 | 1993 | 32.8 | 117 | 73 | ... | 112 | 55 | 3 | 0 | 52 | 84 | 201 | 11 | 0 | Matches |
| 4 | Charles Abi | fr FRA | FW | Saint-Étienne | fr Ligue 1 | 21 | 2000 | 0.5 | 0 | 0 | ... | 3 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | Matches |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 2916 | Martín Zubimendi | es ESP | MF | Real Sociedad | es La Liga | 22 | 1999 | 28.8 | 61 | 32 | ... | 46 | 39 | 14 | 0 | 25 | 49 | 110 | 65 | 0 | Matches |
| 2917 | Szymon Żurkowski | pl POL | MF | Empoli | it Serie A | 23 | 1997 | 25.6 | 71 | 49 | ... | 116 | 52 | 11 | 1 | 41 | 57 | 128 | 30 | 2 | Matches |
| 2918 | Martin Ødegaard | no NOR | MF | Arsenal | eng Premier League | 22 | 1998 | 30.9 | 43 | 25 | ... | 205 | 18 | 1 | 0 | 17 | 22 | 65 | 12 | 1 | Matches |
| 2919 | Milan Đurić | ba BIH | FW | Salernitana | it Serie A | 31 | 1990 | 24.1 | 6 | 4 | ... | 141 | 10 | 3 | 0 | 7 | 2 | 8 | 35 | 0 | Matches |
| 2920 | Filip Đuričić | rs SRB | MF,FW | Sassuolo | it Serie A | 29 | 1992 | 7.5 | 12 | 7 | ... | 29 | 9 | 1 | 0 | 8 | 5 | 17 | 0 | 0 | Matches |
2921 rows × 32 columns
# Create DataFrame for Players Miscellaneous Stats (6/6)
# table colums from inspect url
headers_miscellaneous = ['player_name','nationality','position','team','league','age','birth_year','minutes_by_90','yellow_cards','red_cards','second_yellow_card','fouls_commited','fouls_drawn','offsides','crosses','interceptions','tackels_won','pens_won','pens_conceded','own_goals','ball_recoveries','aerials_won','aerials_lost','aerials_won_percent','matches']
df_miscellaneous = pd.DataFrame(columns=headers_miscellaneous)
i=0
for j in table_miscellaneous.find_all('tr')[1:]:
row_data = j.find_all('td')
row = [tr.text for tr in row_data]
if row != []:
#print(row)
df_miscellaneous.loc[i] = row
i=i+1
df_miscellaneous
| player_name | nationality | position | team | league | age | birth_year | minutes_by_90 | yellow_cards | red_cards | ... | interceptions | tackels_won | pens_won | pens_conceded | own_goals | ball_recoveries | aerials_won | aerials_lost | aerials_won_percent | matches | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | Max Aarons | eng ENG | DF | Norwich City | eng Premier League | 21 | 2000 | 32.0 | 8 | 0 | ... | 56 | 37 | 0 | 2 | 1 | 177 | 15 | 51 | 22.7 | Matches |
| 1 | Yunis Abdelhamid | ma MAR | DF | Reims | fr Ligue 1 | 33 | 1987 | 33.1 | 5 | 1 | ... | 103 | 46 | 0 | 1 | 0 | 224 | 67 | 45 | 59.8 | Matches |
| 2 | Salis Abdul Samed | gh GHA | MF | Clermont Foot | fr Ligue 1 | 21 | 2000 | 27.4 | 12 | 3 | ... | 51 | 34 | 0 | 0 | 0 | 240 | 24 | 24 | 50.0 | Matches |
| 3 | Laurent Abergel | fr FRA | MF | Lorient | fr Ligue 1 | 28 | 1993 | 32.8 | 9 | 0 | ... | 84 | 73 | 0 | 0 | 0 | 291 | 14 | 14 | 50.0 | Matches |
| 4 | Charles Abi | fr FRA | FW | Saint-Étienne | fr Ligue 1 | 21 | 2000 | 0.5 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 2 | 1 | 0 | 100.0 | Matches |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 2916 | Martín Zubimendi | es ESP | MF | Real Sociedad | es La Liga | 22 | 1999 | 28.8 | 4 | 0 | ... | 49 | 32 | 0 | 0 | 0 | 271 | 77 | 40 | 65.8 | Matches |
| 2917 | Szymon Żurkowski | pl POL | MF | Empoli | it Serie A | 23 | 1997 | 25.6 | 5 | 0 | ... | 57 | 49 | 0 | 1 | 0 | 206 | 26 | 40 | 39.4 | Matches |
| 2918 | Martin Ødegaard | no NOR | MF | Arsenal | eng Premier League | 22 | 1998 | 30.9 | 4 | 0 | ... | 22 | 25 | 0 | 2 | 0 | 230 | 17 | 25 | 40.5 | Matches |
| 2919 | Milan Đurić | ba BIH | FW | Salernitana | it Serie A | 31 | 1990 | 24.1 | 6 | 0 | ... | 2 | 4 | 1 | 0 | 0 | 78 | 298 | 116 | 72.0 | Matches |
| 2920 | Filip Đuričić | rs SRB | MF,FW | Sassuolo | it Serie A | 29 | 1992 | 7.5 | 1 | 0 | ... | 5 | 7 | 0 | 0 | 0 | 35 | 3 | 5 | 37.5 | Matches |
2921 rows × 25 columns
# Function to load CSV with specific encoding for utf 8
def load_csv(path):
df = pd.read_csv(path,encoding='utf-8')
return df
# Function to Export csv function with utf 8 encoding
def export_csv(df,path,filename):
filename = "{}.csv".format(filename)
path = "{}\{}".format(path,filename)
df.to_csv(path,encoding='utf-8')
# Test Function load_csv
#df_stats = load_csv("C:\Python_Projects\CSV\player_stats_dataframe.csv")
# Create New DataFrame with by custom columns
custom_headers = ["first_name","last_name","full_name","team","position","value"]
df_values = pd.DataFrame(columns=custom_headers)
# Move Columns from df_stats to df_values
df_values["full_name"] = df_stats["player_name"].values
df_values["team"] = df_stats["team"].values
df_values["position"] = df_stats["position"].values
# Function to Split player full_name to first_name and last_name
# Needed for searchine player value in transfermarket website later
def split_first_last(full_name):
if " " not in full_name:
first_name = full_name
last_name = "NaN"
return first_name,last_name
else:
first_name = full_name.split(" ")[0]
last_name = full_name.split(" ",1)[1]
return first_name,last_name
# Testing Split function
full_name = "Miguel Ángel Rubio"
first_name, last_name = split_first_last(full_name)
print("first name:",first_name,"\nlast name:",last_name)
first name: Miguel last name: Ángel Rubio
# Fill Columns Data in df_values with full_name, first_name, last_name
i=0
for full_name in df_values["full_name"]:
first_name, last_name = split_first_last(full_name)
df_values["first_name"][i] = first_name
df_values["last_name"][i] = last_name
i=i+1
df_values
| first_name | last_name | full_name | team | position | value | |
|---|---|---|---|---|---|---|
| 0 | Max | Aarons | Max Aarons | Norwich City | DF | NaN |
| 1 | Yunis | Abdelhamid | Yunis Abdelhamid | Reims | DF | NaN |
| 2 | Salis | Abdul Samed | Salis Abdul Samed | Clermont Foot | MF | NaN |
| 3 | Laurent | Abergel | Laurent Abergel | Lorient | MF | NaN |
| 4 | Charles | Abi | Charles Abi | Saint-Étienne | FW | NaN |
| ... | ... | ... | ... | ... | ... | ... |
| 2916 | Martín | Zubimendi | Martín Zubimendi | Real Sociedad | MF | NaN |
| 2917 | Szymon | Żurkowski | Szymon Żurkowski | Empoli | MF | NaN |
| 2918 | Martin | Ødegaard | Martin Ødegaard | Arsenal | MF | NaN |
| 2919 | Milan | Đurić | Milan Đurić | Salernitana | FW | NaN |
| 2920 | Filip | Đuričić | Filip Đuričić | Sassuolo | MF,FW | NaN |
2921 rows × 6 columns
# Function to check player url status
def check_player_url(url):
headers = {'User-Agent':
'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36'}
response_stats = requests.get(url, headers=headers)
if((response_stats.status_code) == 200):
status = "OK"
else:
status = "ERROR"
return status
# Function to check if player page exist or not in transfermarket
def search_player(transfermarket_soup):
#check if header h2 exist
value_h2 = transfermarket_soup.find_all('h2')
if(value_h2):
status = "NOT_FOUND"
else:
status = "FOUND"
return status
# Function to get player value from transfermarket url
# return value if player exist and found, return NaN other.
def get_player_value(first_name,last_name,team):
# get first char
first_name = first_name[0]
transfermarket_base_url = "https://www.transfermarkt.us/schnellsuche/ergebnis/schnellsuche?query={}%2C{}%3A{}".format(last_name,first_name,team)
# check url
status = check_player_url(transfermarket_base_url)
if(status == 'OK'):
headers = {'User-Agent':
'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36'}
transfermarket_page_details = requests.get(transfermarket_base_url, headers=headers)
transfermarket_soup = BeautifulSoup(transfermarket_page_details.text, 'html.parser')
search_status = search_player(transfermarket_soup)
if(search_status == "FOUND"):
value = transfermarket_soup.find_all("td",{"class":"rechts hauptlink"})
# retrun player value
return value[0].text
else:
value = "NaN"
return value
else:
value = "NaN"
return value
# Search for each player value and fill the value columns in df_values
i=0
length = len(df_values["value"])
for value in range(len(df_values["value"])):
first_name = df_values["first_name"][i]
last_name = df_values["last_name"][i]
team = df_values["team"][i]
value = get_player_value(first_name,last_name,team)
df_values["value"][i] = value
print(i,"/",length, df_values["full_name"][i], "=",value)
i=i+1
0 / 2921 Max Aarons = $24.20m 1 / 2921 Yunis Abdelhamid = $1.32m 2 / 2921 Salis Abdul Samed = $3.30m 3 / 2921 Laurent Abergel = $3.30m 4 / 2921 Charles Abi = NaN 5 / 2921 Dickson Abiama = $880Th. 6 / 2921 Matthis Abline = NaN 7 / 2921 Tammy Abraham = $55.00m 8 / 2921 Luis Abram = NaN 9 / 2921 Francesco Acerbi = $4.40m 10 / 2921 Ragnar Ache = NaN 11 / 2921 Mohamed Achi = $330Th. 12 / 2921 Marcos Acuña = $19.80m 13 / 2921 Che Adams = $19.80m 14 / 2921 Tyler Adams = $18.70m 15 / 2921 Sargis Adamyan = NaN 16 / 2921 Martin Adeline = $880Th. 17 / 2921 Amine Adli = $13.20m 18 / 2921 Yacine Adli = $9.90m 19 / 2921 Michel Aebischer = $3.85m 20 / 2921 Felix Afena-Gyan = $6.60m 21 / 2921 Martin Agirregabiria = NaN 22 / 2921 Julen Agirrezabala = NaN 23 / 2921 Lucien Agoume = $7.70m 24 / 2921 Kevin Agudelo = $3.85m 25 / 2921 Nayef Aguerd = $13.20m 26 / 2921 Sergio Agüero = NaN 27 / 2921 Ruben Aguilar = $11.00m 28 / 2921 Álvaro Aguirre = - 29 / 2921 Naouirou Ahamada = $1.65m 30 / 2921 Anel Ahmedhodzic = $6.60m 31 / 2921 Jean-Eudes Aholou = $3.30m 32 / 2921 Joseph Aidoo = $7.70m 33 / 2921 Ola Aina = $3.85m 34 / 2921 Rayan Aït Nouri = NaN 35 / 2921 Kristoffer Ajer = $19.80m 36 / 2921 Ludovic Ajorque = $17.60m 37 / 2921 Manuel Akanji = $33.00m 38 / 2921 Carlos Akapo = $1.32m 39 / 2921 Marley Aké = $2.75m 40 / 2921 Nathan Aké = $27.50m 41 / 2921 Ilias Akhomach = $3.30m 42 / 2921 Maghnes Akliouche = $1.10m 43 / 2921 Paul Akouokou = $4.40m 44 / 2921 Jean-Daniel Akpa-Akpro = NaN 45 / 2921 Kevin Akpoguma = $6.60m 46 / 2921 David Alaba = $60.50m 47 / 2921 Sofiane Alakouch = NaN 48 / 2921 Tomás Alarcón = $3.30m 49 / 2921 Lucas Alario = $8.80m 50 / 2921 Jordi Alba = $9.90m 51 / 2921 Josué Albert = $330Th. 52 / 2921 Luis Alberto = $30.80m 53 / 2921 Raúl Albiol = $3.30m 54 / 2921 Marc Albrighton = $2.75m 55 / 2921 Paco Alcácer = $9.90m 56 / 2921 Thiago Alcántara = $22.00m 57 / 2921 Rubén Alcaraz = $2.75m 58 / 2921 Omar Alderete = $11.00m 59 / 2921 Iván Alejo = $1.32m 60 / 2921 Doğan Alemdar = $3.85m 61 / 2921 Carles Aleñá = $9.90m 62 / 2921 Trent Alexander-Arnold = $88.00m 63 / 2921 Mircea Alexandru Tirlea = NaN 64 / 2921 Mohamed Ali Cho = NaN 65 / 2921 Alisson = NaN 66 / 2921 Allan = NaN 67 / 2921 Jim Allevinah = $2.20m 68 / 2921 Dele Alli = NaN 69 / 2921 Dele Alli = $17.60m 70 / 2921 Miguel Almirón = NaN 71 / 2921 Marcos Alonso = $13.20m 72 / 2921 Giorgio Altare = $2.20m 73 / 2921 Hugo Álvarez = - 74 / 2921 Yeray Álvarez = NaN 75 / 2921 Dani Alves = $1.10m 76 / 2921 Steven Alzate = $5.50m 77 / 2921 Ibrahim Amadou = $2.20m 78 / 2921 Emmanuel Amankwaa Akurugu = NaN 79 / 2921 Daniel Amartey = $11.00m 80 / 2921 Amath = NaN 81 / 2921 Jordan Amavi = $6.60m 82 / 2921 Jordan Amavi = NaN 83 / 2921 Wisdom Amey = - 84 / 2921 Kelvin Amian = $3.85m 85 / 2921 Nadiem Amiri = NaN 86 / 2921 Nadiem Amiri = $8.80m 87 / 2921 Ethan Ampadu = $14.30m 88 / 2921 Sofyan Amrabat = $11.00m 89 / 2921 Joachim Andersen = $27.50m 90 / 2921 Felipe Anderson = $14.30m 91 / 2921 Sebastian Andersson = $2.20m 92 / 2921 Florin Andone = $1.10m 93 / 2921 Andrés Andrade Cedeño = NaN 94 / 2921 Fredrik André Bjørkan = NaN 95 / 2921 Benjamin André = $13.20m 96 / 2921 Robert Andrich = $14.30m 97 / 2921 José Ángel = NaN 98 / 2921 Angeliño = NaN 99 / 2921 Ebenezer Annan = $83Th. 100 / 2921 Cristian Ansaldi = $770Th. 101 / 2921 Janis Antiste = $4.40m 102 / 2921 Waldemar Anton = $6.60m 103 / 2921 Josep Antoni Gayá = NaN 104 / 2921 Michail Antonio = $11.00m 105 / 2921 Christopher Antwi-Adjei = $1.10m 106 / 2921 Houssem Aouar = $27.50m 107 / 2921 Adil Aouchiche = $6.60m 108 / 2921 Dennis Appiah = $2.20m 109 / 2921 Mauro Arambarri = $16.50m 110 / 2921 Mattia Aramu = $4.40m 111 / 2921 Charles Aránguiz = $3.85m 112 / 2921 Néstor Araujo = $4.40m 113 / 2921 Ronald Araújo = $55.00m 114 / 2921 Cameron Archer = $6.60m 115 / 2921 Alphonse Areola = $8.80m 116 / 2921 Jesús Areso = $880Th. 117 / 2921 Matias Arezo = $6.60m 118 / 2921 Santiago Arias = $4.40m 119 / 2921 Adam Armstrong = $16.50m 120 / 2921 Stuart Armstrong = $6.60m 121 / 2921 Marko Arnautović = $6.60m 122 / 2921 Maximilian Arnold = $18.70m 123 / 2921 Kepa Arrizabalaga = $11.00m 124 / 2921 Tolgay Arslan = $2.53m 125 / 2921 Arthur = NaN 126 / 2921 Santiago Arzamendia = $1.98m 127 / 2921 Takuma Asano = $3.30m 128 / 2921 Santiago Ascacíbar = $7.15m 129 / 2921 Sergio Asenjo = $4.40m 130 / 2921 Alejandro Asensio = - 131 / 2921 Marco Asensio = $44.00m 132 / 2921 Harrison Ashby = $330Th. 133 / 2921 Kristoffer Askildsen = $1.98m 134 / 2921 Fisnik Asllani = $440Th. 135 / 2921 Kristjan Asllani = $11.00m 136 / 2921 Iago Aspas = $7.70m 137 / 2921 Lorenz Assignon = $3.30m 138 / 2921 Simon Asta = $990Th. 139 / 2921 Youcef Atal = $16.50m 140 / 2921 Pierre-Emerick Aubameyang = NaN 141 / 2921 Pierre-Emerick Aubameyang = $16.50m 142 / 2921 Emil Audero = $6.60m 143 / 2921 Tommaso Augello = $3.85m 144 / 2921 Jean-Kévin Augustin = $1.65m 145 / 2921 Ludwig Augustinsson = $5.50m 146 / 2921 Serge Aurier = $11.00m 147 / 2921 Ezequiel Ávila = NaN 148 / 2921 Taiwo Awoniyi = $22.00m 149 / 2921 Ramzi Aya = NaN 150 / 2921 Jordan Ayew = $6.60m 151 / 2921 Kaan Ayhan = $5.50m 152 / 2921 Luke Ayling = $4.40m 153 / 2921 Karim Azamoum = $440Th. 154 / 2921 Sardar Azmoun = $24.20m 155 / 2921 César Azpilicueta = $9.90m 156 / 2921 Iddrisu Baba = $3.85m 157 / 2921 Carlos Bacca = $1.10m 158 / 2921 Daniel Bachmann = $2.75m 159 / 2921 Loïc Bade = $13.20m 160 / 2921 Milan Badelj = $1.10m 161 / 2921 Édgar Badía = $3.30m 162 / 2921 Benoît Badiashile = $33.00m 163 / 2921 Youssouph Badji = NaN 164 / 2921 Miguel Baeza = NaN 165 / 2921 Nicola Bagnolini = - 166 / 2921 Issa Bah = $110Th. 167 / 2921 Stéphane Bahoken = $4.40m 168 / 2921 Leon Bailey = $27.50m 169 / 2921 Eric Bailly = NaN 170 / 2921 Dénys Bain = $1.10m 171 / 2921 Stefan Bajic = NaN 172 / 2921 Nedim Bajrami = $11.00m 173 / 2921 Cédric Bakambu = $8.80m 174 / 2921 Abdoulaye Bakayoko = $330Th. 175 / 2921 Tiemoué Bakayoko = $11.00m 176 / 2921 Mitchel Bakker = $15.40m 177 / 2921 Ridle Baku = $22.00m 178 / 2921 Dilane Bakwa = $440Th. 179 / 2921 Tommaso Baldanzi = $880Th. 180 / 2921 Alejandro Balde = $4.40m 181 / 2921 Ibrahima Baldé = $330Th. 182 / 2921 Keita Baldé = $3.30m 183 / 2921 Gareth Bale = $3.30m 184 / 2921 Mikel Balenziaga = NaN 185 / 2921 Leonardo Balerdi = $11.00m 186 / 2921 Iván Balliu = $2.20m 187 / 2921 Fodé Ballo-Touré = $3.85m 188 / 2921 Folarin Balogun = $4.40m 189 / 2921 Abdoulaye Bamba = $550Th. 190 / 2921 Jonathan Bamba = $18.70m 191 / 2921 Patrick Bamford = $17.60m 192 / 2921 Filippo Bandinelli = $3.30m 193 / 2921 Mattia Bani = $1.98m 194 / 2921 Simon Banza = NaN 195 / 2921 Shandon Baptiste = $3.30m 196 / 2921 Antonín Barák = $22.00m 197 / 2921 Barbero = NaN 198 / 2921 Danilo Barbosa = $3.85m 199 / 2921 Barcia = NaN 200 / 2921 Bradley Barcola = $1.10m 201 / 2921 Melvin Bard = $9.90m 202 / 2921 Enis Bardhi = $8.80m 203 / 2921 Francesco Bardi = $660Th. 204 / 2921 Keidi Bare = $4.40m 205 / 2921 Nicolò Barella = $77.00m 206 / 2921 Kike Barja = $3.30m 207 / 2921 Ross Barkley = $13.20m 208 / 2921 Aymen Barkok = NaN 209 / 2921 Ashley Barnes = $1.65m 210 / 2921 Harvey Barnes = $35.20m 211 / 2921 Antonio Barragán = $660Th. 212 / 2921 Leandro Barreiro Martins = NaN 213 / 2921 Ander Barrenetxea = $9.90m 214 / 2921 Jacob Barrett Laursen = NaN 215 / 2921 Musa Barrow = $19.80m 216 / 2921 Abdourahmane Barry = $330Th. 217 / 2921 Marc Bartra = $6.60m 218 / 2921 Daniele Baselli = NaN 219 / 2921 Daniele Baselli = $1.54m 220 / 2921 Toma Bašić = NaN 221 / 2921 Toma Bašić = $8.80m 222 / 2921 Amine Bassi = $1.65m 223 / 2921 Álvaro Bastida = $1.10m 224 / 2921 Alessandro Bastoni = $66.00m 225 / 2921 Simone Bastoni = $8.25m 226 / 2921 Lewis Bate = $1.10m 227 / 2921 Rodrigo Battaglia = $1.98m 228 / 2921 Maximilian Bauer = $1.76m 229 / 2921 Oliver Baumann = $4.95m 230 / 2921 Timo Baumgartl = $5.50m 231 / 2921 Julian Baumgartlinger = $880Th. 232 / 2921 Christoph Baumgartner = $24.20m 233 / 2921 Jon Bautista = NaN 234 / 2921 Mohamed Bayo = $13.20m 235 / 2921 Paul Baysse = $880Th. 236 / 2921 Noah Joel Sarenren Bazee = NaN 237 / 2921 Bebé = NaN 238 / 2921 Ihlas Bebou = $17.60m 239 / 2921 Rodrigo Becão = $6.60m 240 / 2921 Mads Bech Sørensen = $5.50m 241 / 2921 Sheraldo Becker = $7.70m 242 / 2921 Jan Bednarek = $24.20m 243 / 2921 Donny van de Beek = NaN 244 / 2921 Donny van de Beek = NaN 245 / 2921 Asmir Begović = $1.10m 246 / 2921 Valon Behrami = NaN 247 / 2921 Kevin Behrens = $990Th. 248 / 2921 Youcef Belaïli = $2.20m 249 / 2921 Vid Belec = $550Th. 250 / 2921 Ishak Belfodil = $2.42m 251 / 2921 Haris Belkebla = $4.40m 252 / 2921 Stefan Bell = $2.75m 253 / 2921 Armel Bella Kotchap = NaN 254 / 2921 Raoul Bellanova = $7.70m 255 / 2921 Karim Bellarabi = $3.30m 256 / 2921 Jean-Ricner Bellegarde = $8.80m 257 / 2921 Héctor Bellerín = $22.00m 258 / 2921 Jude Bellingham = $88.00m 259 / 2921 George Bello = $3.30m 260 / 2921 Jeanuel Belocian = $550Th. 261 / 2921 Andrea Belotti = $22.00m 262 / 2921 Fran Beltrán = $16.50m 263 / 2921 Hatem Ben Arfa = $1.65m 264 / 2921 Salim Ben Seghir = $440Th. 265 / 2921 Wissam Ben Yedder = $27.50m 266 / 2921 Marco Benassi = NaN 267 / 2921 Marco Benassi = $2.64m 268 / 2921 Darío Benedetto = NaN 269 / 2921 Darío Benedetto = NaN 270 / 2921 László Bénes = NaN 271 / 2921 Walter Benítez = $15.40m 272 / 2921 Iker Benito = $330Th. 273 / 2921 Loris Benito = NaN 274 / 2921 Pedro Benito = NaN 275 / 2921 Filip Benković = $1.98m 276 / 2921 Ismaël Bennacer = $36.30m 277 / 2921 Keanan Bennetts = NaN 278 / 2921 Saïd Benrahma = $27.50m 279 / 2921 Ramy Bensebaini = NaN 280 / 2921 Nabil Bentaleb = $3.85m 281 / 2921 Rodrigo Bentancur = $30.80m 282 / 2921 Rodrigo Bentancur = NaN 283 / 2921 Christian Benteke = $6.60m 284 / 2921 Karim Benzema = $33.00m 285 / 2921 Alessandro Berardi = $55Th. 286 / 2921 Domenico Berardi = $38.50m 287 / 2921 Yuri Berchiche = NaN 288 / 2921 Álex Berenguer = NaN 289 / 2921 Bartosz Bereszyński = $4.40m 290 / 2921 Jóhann Berg Guðmundsson = NaN 291 / 2921 Patrick Berg = $4.95m 292 / 2921 Mitchell van Bergen = $2.20m 293 / 2921 Steven Bergwijn = $19.80m 294 / 2921 Etrit Berisha = $880Th. 295 / 2921 Valon Berisha = $2.75m 296 / 2921 Federico Bernardeschi = $11.00m 297 / 2921 Paul Bernardoni = NaN 298 / 2921 Paul Bernardoni = $7.70m 299 / 2921 Juan Bernat = NaN 300 / 2921 Dimitry Bertaud = $1.65m 301 / 2921 Jason Berthomier = $1.32m 302 / 2921 Nicolò Bertola = $330Th. 303 / 2921 Ryan Bertrand = $3.30m 304 / 2921 Daniel Bessa = $2.75m 305 / 2921 Beto = NaN 306 / 2921 Louis Beyer = NaN 307 / 2921 Bartosz Bialek = $4.40m 308 / 2921 Giulian Biancone = $4.40m 309 / 2921 Ermin Bičakčić = $1.10m 310 / 2921 Mads Bidstrup = NaN 311 / 2921 Pedro Bigas = $1.10m 312 / 2921 El Bilal Touré = NaN 313 / 2921 Jean-Claude Billong = $1.10m 314 / 2921 Luis Binks = $1.65m 315 / 2921 Cristiano Biraghi = $11.00m 316 / 2921 Davide Biraschi = NaN 317 / 2921 Tom Bischof = $1.10m 318 / 2921 Yves Bissouma = $38.50m 319 / 2921 Nathan Bitu Mazala = NaN 320 / 2921 Marco Bizot = $4.95m 321 / 2921 Bjarki Bjarkason = NaN 322 / 2921 Blanco = NaN 323 / 2921 Ludovic Blas = $17.60m 324 / 2921 Danny Blum = $660Th. 325 / 2921 Myron Boadu = $15.40m 326 / 2921 Jérôme Boateng = $3.85m 327 / 2921 Kevin-Prince Boateng = $990Th. 328 / 2921 Antonin Bobichon = NaN 329 / 2921 Herbert Bockhorn = $880Th. 330 / 2921 Jean-Paul Boëtius = $4.40m 331 / 2921 Jeremie Boga = $20.90m 332 / 2921 Jeremie Boga = NaN 333 / 2921 Luka Bogdan = NaN 334 / 2921 Emil Bohinen = $4.40m 335 / 2921 Quentin Boisgard = $1.98m 336 / 2921 Charles Boli = NaN 337 / 2921 Willy Boly = NaN 338 / 2921 Giacomo Bonaventura = $3.30m 339 / 2921 Federico Bonazzoli = $5.50m 340 / 2921 Tarsis Bonga = $330Th. 341 / 2921 Kevin Bonifazi = $4.18m 342 / 2921 Solomon Bonnah = NaN 343 / 2921 Leonardo Bonucci = $6.60m 344 / 2921 Sebastiaan Bornauw = $11.00m 345 / 2921 Rafael Borré = NaN 346 / 2921 Sven Botman = $33.00m 347 / 2921 Denis Bouanga = $8.80m 348 / 2921 Hicham Boudaoui = $7.15m 349 / 2921 Ryad Boudebouz = $2.20m 350 / 2921 Sofiane Boufal = $8.80m 351 / 2921 Farid Boulaya = $3.85m 352 / 2921 Yassine Bounou = $19.80m 353 / 2921 Ismaëlben Boura = NaN 354 / 2921 Mehdi Bourabia = $990Th. 355 / 2921 Benjamin Bourigeaud = $19.80m 356 / 2921 Redwan Bourles = $330Th. 357 / 2921 Edoardo Bove = $1.21m 358 / 2921 Jarrod Bowen = $46.20m 359 / 2921 Dedryck Boyata = $3.85m 360 / 2921 Lucas Boyé = $16.50m 361 / 2921 Domagoj Bradarić = $3.85m 362 / 2921 Bilal Brahimi = $5.50m 363 / 2921 Bilal Brahimi = NaN 364 / 2921 Martin Braithwaite = $6.60m 365 / 2921 Julian Brandt = $27.50m 366 / 2921 Jarrad Branthwaite = $3.30m 367 / 2921 Darko Brašanac = $2.20m 368 / 2921 Lilian Brassier = $4.40m 369 / 2921 Claudio Bravo = $1.10m 370 / 2921 Iker Bravo = $1.10m 371 / 2921 Fabian Bredlow = $550Th. 372 / 2921 Josip Brekalo = NaN 373 / 2921 Josip Brekalo = $16.50m 374 / 2921 Gleison Bremer = $38.50m 375 / 2921 Jimmy Briand = $660Th. 376 / 2921 Yan Brice Eteki = NaN 377 / 2921 Brian Brobbey = NaN 378 / 2921 Armando Broja = NaN 379 / 2921 Dylan Bronn = $4.40m 380 / 2921 John Brooks = $7.70m 381 / 2921 Daniel Brosinski = $550Th. 382 / 2921 Josh Brownhill = $7.70m 383 / 2921 Marcelo Brozović = $44.00m 384 / 2921 Cédric Brunner = $3.52m 385 / 2921 Lewis Brunt = - 386 / 2921 Jacob Bruun Larsen = $6.60m 387 / 2921 Bryan = NaN 388 / 2921 Bryan = NaN 389 / 2921 Ante Budimir = $6.60m 390 / 2921 Emi Buendía = $35.20m 391 / 2921 Osman Bukari = $3.30m 392 / 2921 Aleksander Buksa = $1.32m 393 / 2921 Alessandro Buongiorno = $4.40m 394 / 2921 Sascha Burchert = $440Th. 395 / 2921 Delano Burgzorg = $2.20m 396 / 2921 Jonathan Burkardt = $18.70m 397 / 2921 Roman Bürki = $1.65m 398 / 2921 Dan Burn = NaN 399 / 2921 Dan Burn = NaN 400 / 2921 Maxime Busi = $3.85m 401 / 2921 Gianluca Busio = $9.35m 402 / 2921 Oriol Busquets = $1.32m 403 / 2921 Sergio Busquets = $9.90m 404 / 2921 Jack Butland = $1.98m 405 / 2921 Adrián Butzke = NaN 406 / 2921 Marcin Bułka = $2.20m 407 / 2921 Jamie Bynoe-Gittens = $4.40m 408 / 2921 Sam Byram = $2.20m 409 / 2921 Erick Cabaco = $1.98m 410 / 2921 Willy Caballero = $275Th. 411 / 2921 Rémy Cabella = $7.15m 412 / 2921 Jimmy Cabot = $5.50m 413 / 2921 Jovane Cabral = $6.05m 414 / 2921 Leandro Cabrera = $4.40m 415 / 2921 Liberato Cacace = $2.75m 416 / 2921 Martín Cáceres = $990Th. 417 / 2921 Martín Cáceres = NaN 418 / 2921 Anthony Caci = $7.70m 419 / 2921 Mathieu Cafaro = NaN 420 / 2921 Yannick Cahuzac = $330Th. 421 / 2921 Felipe Caicedo = NaN 422 / 2921 Felipe Caicedo = $1.65m 423 / 2921 Moisés Caicedo = $6.60m 424 / 2921 Marc-Aurèle Caillard = $1.32m 425 / 2921 Jens Cajuste = $5.50m 426 / 2921 Cala = NaN 427 / 2921 Davide Calabria = $27.50m 428 / 2921 Riccardo Calafiori = $3.85m 429 / 2921 Riccardo Calafiori = NaN 430 / 2921 Mattia Caldara = $3.85m 431 / 2921 Calderón = NaN 432 / 2921 Fernando Calero = $1.98m 433 / 2921 Duje Ćaleta-Car = $17.60m 434 / 2921 Hakan Çalhanoğlu = $38.50m 435 / 2921 Daniel Caligiuri = $880Th. 436 / 2921 José Callejón = $1.10m 437 / 2921 Lucas Calodat = $165Th. 438 / 2921 Dominic Calvert-Lewin = $44.00m 439 / 2921 Mahdi Camara = $6.60m 440 / 2921 Mamadou Camara = $220Th. 441 / 2921 Víctor Camarasa = $1.10m 442 / 2921 Eduardo Camavinga = $60.50m 443 / 2921 Eduardo Camavinga = NaN 444 / 2921 Andrea Cambiaso = $5.50m 445 / 2921 José Campaña = $6.60m 446 / 2921 Chem Campbell = NaN 447 / 2921 Emre Can = $17.60m 448 / 2921 Sergio Canales = $22.00m 449 / 2921 Matteo Cancellieri = $3.30m 450 / 2921 João Cancelo = $71.50m 451 / 2921 Fali Candé = $1.65m 452 / 2921 Antonio Candreva = $2.75m 453 / 2921 Sergi Canós = $15.40m 454 / 2921 Álex Cantero = $1.10m 455 / 2921 Todd Cantwell = $19.80m 456 / 2921 Ander Capa = NaN 457 / 2921 Pierrick Capelle = $550Th. 458 / 2921 Leonardo Capezzi = $660Th. 459 / 2921 Étienne Capoue = $3.30m 460 / 2921 Gianluca Caprari = $11.00m 461 / 2921 Francesco Caputo = $2.75m 462 / 2921 Francesco Caputo = NaN 463 / 2921 Maxence Caqueret = $27.50m 464 / 2921 Andrea Carboni = $5.50m 465 / 2921 Isaac Carcelen = $1.65m 466 / 2921 Cárdenas = NaN 467 / 2921 Irvin Cardona = $4.95m 468 / 2921 Igor Carioca = NaN 469 / 2921 Carlo = NaN 470 / 2921 Diego Carlos = $44.00m 471 / 2921 Carmona = NaN 472 / 2921 Yannick Carrasco = $44.00m 473 / 2921 Guido Carrillo = $1.65m 474 / 2921 Dani Carvajal = $19.80m 475 / 2921 William Carvalho = $17.60m 476 / 2921 Nicolò Casale = $8.25m 477 / 2921 Casemiro = NaN 478 / 2921 Matty Cash = $27.50m 479 / 2921 Kiko Casilla = $770Th. 480 / 2921 Moreto Cassamã = $3.30m 481 / 2921 Francesco Cassata = NaN 482 / 2921 Timothy Castagne = $30.80m 483 / 2921 Koen Casteels = $12.10m 484 / 2921 Jean-Charles Castelletto = $4.40m 485 / 2921 Samu Castillejo = $4.40m 486 / 2921 Gonzalo Castro = $550Th. 487 / 2921 Jonny Castro = NaN 488 / 2921 Gaetano Castrovilli = $13.20m 489 / 2921 Danilo Cataldi = $5.50m 490 / 2921 Catena = NaN 491 / 2921 Craig Cathcart = $1.32m 492 / 2921 Edinson Cavani = NaN 493 / 2921 Dani Ceballos = $15.40m 494 / 2921 Pietro Ceccaroni = $2.64m 495 / 2921 Federico Ceccherini = $4.40m 496 / 2921 Emil Ceide = $2.20m 497 / 2921 Zeki Çelik = $19.80m 498 / 2921 Fabien Centonze = $7.70m 499 / 2921 Luca Ceppitelli = $880Th. 500 / 2921 Franco Cervi = $5.50m 501 / 2921 Leonardo César Jardim = NaN 502 / 2921 Damir Ceter = $660Th. 503 / 2921 Julian Chabot = $2.20m 504 / 2921 Julian Chabot = NaN 505 / 2921 El Chadaille Bitshiabu = NaN 506 / 2921 Nassim Chadli = $550Th. 507 / 2921 Kayky Chagas = NaN 508 / 2921 Mehdi Chahiri = NaN 509 / 2921 Trevoh Chalobah = $22.00m 510 / 2921 Calum Chambers = NaN 511 / 2921 Calum Chambers = $11.00m 512 / 2921 Dylan Chambost = $1.32m 513 / 2921 Timothy Chandler = NaN 514 / 2921 Chapela = NaN 515 / 2921 Brendan Chardonnet = $5.50m 516 / 2921 Xavier Chavalerin = $3.85m 517 / 2921 Xavier Chavalerin = NaN 518 / 2921 Justin Che = $3.30m 519 / 2921 Chema = NaN 520 / 2921 Rayan Cherki = $19.80m 521 / 2921 Denis Cheryshev = $2.75m 522 / 2921 Daniel Chesters = $275Th. 523 / 2921 Giorgio Chiellini = $1.65m 524 / 2921 Federico Chiesa = $71.50m 525 / 2921 Ben Chilwell = $41.80m 526 / 2921 Chiquinho = NaN 527 / 2921 Vlad Chiricheș = $1.98m 528 / 2921 Pedro Chirivella = $7.70m 529 / 2921 Joris Chotard = $11.00m 530 / 2921 Hamza Choudhury = $4.40m 531 / 2921 Andreas Christensen = $38.50m 532 / 2921 Max Christiansen = $1.65m 533 / 2921 Carney Chukwuemeka = $6.60m 534 / 2921 Samuel Chukwueze = $22.00m 535 / 2921 Víctor Chust = $2.75m 536 / 2921 Riccardo Ciervo = NaN 537 / 2921 Jasper Cillessen = $3.30m 538 / 2921 Pathé Ciss = $2.20m 539 / 2921 Moustapha Cissé = - 540 / 2921 Giorgio Cittadini = $165Th. 541 / 2921 Ciaran Clark = NaN 542 / 2921 Alexis Claude-Maurice = $6.60m 543 / 2921 Jonathan Clauss = $16.50m 544 / 2921 Carlos Clerc = $2.20m 545 / 2921 Tom Cleverley = $1.98m 546 / 2921 Nathaniel Clyne = $2.20m 547 / 2921 Conor Coady = NaN 548 / 2921 Marcus Coco = $2.20m 549 / 2921 Coke = NaN 550 / 2921 Séamus Coleman = $3.30m 551 / 2921 Álex Collado = $4.40m 552 / 2921 Ebrima Colley = $3.52m 553 / 2921 Omar Colley = $4.95m 554 / 2921 Nathan Collins = $11.00m 555 / 2921 Kingsley Coman = $66.00m 556 / 2921 Eray Cömert = $1.65m 557 / 2921 Santi Comesaña = $4.40m 558 / 2921 Diego Conde = $330Th. 559 / 2921 Aaron Connolly = $6.60m 560 / 2921 Andrea Consigli = $1.65m 561 / 2921 Abdu Conté = $3.30m 562 / 2921 Andrea Conti = $2.75m 563 / 2921 Andrea Conti = NaN 564 / 2921 Liam Cooper = $7.70m 565 / 2921 Lucas Copado = $550Th. 566 / 2921 Diego Coppola = $1.10m 567 / 2921 Francis Coquelin = $5.50m 568 / 2921 Sébastien Corchia = $1.98m 569 / 2921 Sergio Córdova = NaN 570 / 2921 Jack Cork = $1.98m 571 / 2921 Maxwel Cornet = $16.50m 572 / 2921 Maxwel Cornet = NaN 573 / 2921 Jesús Corona = $19.80m 574 / 2921 Ángel Correa = $49.50m 575 / 2921 Joaquín Correa = $25.30m 576 / 2921 Thierry Correia = $8.80m 577 / 2921 Danny da Costa = NaN 578 / 2921 David Pereira da Costa = NaN 579 / 2921 Hélder Costa = NaN 580 / 2921 Hélder Costa = $5.50m 581 / 2921 Jaume Costa = $1.32m 582 / 2921 Benoît Costil = $1.65m 583 / 2921 Vladimír Coufal = $13.20m 584 / 2921 Kalifa Coulibaly = $1.65m 585 / 2921 Lassana Coulibaly = $3.30m 586 / 2921 Mamadou Coulibaly = $2.75m 587 / 2921 Tanguy Coulibaly = $2.75m 588 / 2921 Thibaut Courtois = $66.00m 589 / 2921 Philippe Coutinho = $22.00m 590 / 2921 Philippe Coutinho = NaN 591 / 2921 Nicolas Cozza = $5.50m 592 / 2921 Alessio Cragno = $11.00m 593 / 2921 Aaron Cresswell = $3.30m 594 / 2921 Charlie Cresswell = $3.30m 595 / 2921 Domenico Criscito = $660Th. 596 / 2921 Bryan Cristante = $22.00m 597 / 2921 Cristo = NaN 598 / 2921 Enzo Crivelli = $1.98m 599 / 2921 Domen Črnigoj = $1.65m 600 / 2921 Giovanni Crociata = NaN 601 / 2921 Juan Cruz Armada = NaN 602 / 2921 Juan Cuadrado = $8.80m 603 / 2921 Cucho = NaN 604 / 2921 Marc Cucurella = $30.80m 605 / 2921 Marc Cucurella = NaN 606 / 2921 Jorge Cuenca = $8.80m 607 / 2921 Mickaël Cuisance = NaN 608 / 2921 Mickaël Cuisance = $4.40m 609 / 2921 Luke Cundle = NaN 610 / 2921 Matheus Cunha = $33.00m 611 / 2921 Matheus Cunha = NaN 612 / 2921 Patrick Cutrone = $3.85m 613 / 2921 Wylan Cyprien = $4.95m 614 / 2921 Rafael Czichos = NaN 615 / 2921 Lennart-Marten Czyborra = NaN 616 / 2921 Danilo D'Ambrosio = $3.30m 617 / 2921 Lucas Da Cunha = NaN 618 / 2921 Lucas Da Cunha = $4.40m 619 / 2921 Damien Da Silva = $1.10m 620 / 2921 Moanes Dabbur = $4.40m 621 / 2921 Colin Dagba = NaN 622 / 2921 Finn Dahmen = $1.65m 623 / 2921 Mahmoud Dahoud = $19.80m 624 / 2921 Patson Daka = $22.00m 625 / 2921 Stuart Dallas = $4.40m 626 / 2921 Diogo Dalot = NaN 627 / 2921 Mikkel Damsgaard = $16.50m 628 / 2921 Flavius Daniliuc = $8.80m 629 / 2921 Danilo = NaN 630 / 2921 Kevin Danso = $9.90m 631 / 2921 Dante = NaN 632 / 2921 Ebrima Darboe = $2.20m 633 / 2921 Márton Dárdai = $5.50m 634 / 2921 Sergi Darder = $15.40m 635 / 2921 Vladimír Darida = $2.42m 636 / 2921 Karl Darlow = NaN 637 / 2921 Matteo Darmian = $5.50m 638 / 2921 Josh Dasilva = $11.00m 639 / 2921 Jonathan David = $49.50m 640 / 2921 Alphonso Davies = $77.00m 641 / 2921 Ben Davies = $22.00m 642 / 2921 Tom Davies = $19.80m 643 / 2921 Keinan Davis = $2.75m 644 / 2921 Paweł Dawidowicz = $4.95m 645 / 2921 Craig Dawson = $3.30m 646 / 2921 Kevin De Bruyne = $93.50m 647 / 2921 Konrad De La Fuente = $6.60m 648 / 2921 Sebastien De Maio = NaN 649 / 2921 Tommaso De Nipoti = - 650 / 2921 Rodrigo De Paul = $44.00m 651 / 2921 Mattia De Sciglio = $6.60m 652 / 2921 Lorenzo De Silvestri = $1.65m 653 / 2921 Saulo Decarli = $330Th. 654 / 2921 Troy Deeney = NaN 655 / 2921 Grégoire Defrel = $3.30m 656 / 2921 Alessandro Deiola = $2.20m 657 / 2921 Romain Del Castillo = NaN 658 / 2921 Romain Del Castillo = $3.30m 659 / 2921 Thomas Delaine = $2.20m 660 / 2921 Thomas Delaney = $7.70m 661 / 2921 Thomas Delaney = NaN 662 / 2921 Liam Delap = $1.65m 663 / 2921 Sacha Delaye = $880Th. 664 / 2921 Filippo Delli Carri = $385Th. 665 / 2921 Andy Delort = $14.30m 666 / 2921 Andy Delort = NaN 667 / 2921 Fabian Delph = $1.98m 668 / 2921 Moussa Dembélé = $22.00m 669 / 2921 Ousmane Dembélé = $33.00m 670 / 2921 Yusuf Demir = NaN 671 / 2921 Merih Demiral = $27.50m 672 / 2921 Kerem Demirbay = $16.50m 673 / 2921 Ermedin Demirović = $6.60m 674 / 2921 Diego Demme = $8.80m 675 / 2921 Jason Denayer = $15.40m 676 / 2921 Leander Dendoncker = NaN 677 / 2921 Emmanuel Dennis = $15.40m 678 / 2921 Fabio Depaoli = $3.08m 679 / 2921 Fabio Depaoli = NaN 680 / 2921 Memphis Depay = $38.50m 681 / 2921 Mike van der Hoorn = NaN 682 / 2921 Arthur Desmas = $1.32m 683 / 2921 Sergiño Dest = $19.80m 684 / 2921 Mattia Destro = $3.30m 685 / 2921 Gerard Deulofeu = $16.50m 686 / 2921 Kiernan Dewsbury Hall = NaN 687 / 2921 Jacopo Dezi = NaN 688 / 2921 Samuel Di Carmine = NaN 689 / 2921 Federico Di Francesco = $2.20m 690 / 2921 Giovanni Di Lorenzo = $27.50m 691 / 2921 Ángel Di María = NaN 692 / 2921 Francesco Di Mariano = NaN 693 / 2921 Francesco Di Tacchio = $440Th. 694 / 2921 Boulaye Dia = $13.20m 695 / 2921 Moussa Diaby = $66.00m 696 / 2921 Yadaly Diaby = $220Th. 697 / 2921 Mouctar Diakhaby = $7.70m 698 / 2921 Ibrahim Diakité = $220Th. 699 / 2921 Abdou Diallo = NaN 700 / 2921 Habib Diallo = $13.20m 701 / 2921 Ibrahima Diallo = $11.00m 702 / 2921 Mouhamadou Diarra = NaN 703 / 2921 Stéphane Diarra = $1.65m 704 / 2921 Raphael Dias Belloli = $49.50m 705 / 2921 Rúben Dias = $82.50m 706 / 2921 Krepin Diatta = $14.30m 707 / 2921 Amadou Diawara = $6.60m 708 / 2921 Brahim Díaz = $19.80m 709 / 2921 Javier Díaz = $550Th. 710 / 2921 Luis Díaz = $71.50m 711 / 2921 Víctor Díaz = $770Th. 712 / 2921 Daniel Didavi = $550Th. 713 / 2921 Bamba Dieng = $11.00m 714 / 2921 Eric Dier = $30.80m 715 / 2921 Elhadji Dieye = $275Th. 716 / 2921 Lucas Digne = $27.50m 717 / 2921 Lucas Digne = NaN 718 / 2921 Virgil van Dijk = $60.50m 719 / 2921 Mitchell Dijks = $2.20m 720 / 2921 Javairô Dilrosun = $6.60m 721 / 2921 Javairô Dilrosun = NaN 722 / 2921 Federico Dimarco = $19.80m 723 / 2921 Landry Dimata = $2.42m 724 / 2921 Stole Dimitrievski = $3.30m 725 / 2921 Junior Dina Ebimbe = NaN 726 / 2921 Tristan Dingomé = $1.65m 727 / 2921 Sinaly Diomande = $5.50m 728 / 2921 Issa Diop = $11.00m 729 / 2921 Sofiane Diop = $22.00m 730 / 2921 Andy Diouf = $550Th. 731 / 2921 Assane Dioussé = $1.10m 732 / 2921 Axel Disasi = $18.70m 733 / 2921 Filippo Distefano = - 734 / 2921 Matías Dituro = $1.10m 735 / 2921 Tiago Djaló = $13.20m 736 / 2921 Djené = NaN 737 / 2921 Moussa Djenepo = $11.00m 738 / 2921 Koffi Djidji = $3.30m 739 / 2921 Alexander Djiku = $11.00m 740 / 2921 Bryan Djile Nokoué = NaN 741 / 2921 Berat Djimsiti = $18.70m 742 / 2921 Ouparine Djoco = $1.98m 743 / 2921 Naïs Djouahra = $2.20m 744 / 2921 Marko Dmitrović = $5.50m 745 / 2921 Lewis Dobbin = $330Th. 746 / 2921 Matt Doherty = $13.20m 747 / 2921 Jeremy Doku = $22.00m 748 / 2921 Kasper Dolberg = $18.70m 749 / 2921 Jaume Doménech = $2.20m 750 / 2921 Brandon Domingues = $660Th. 751 / 2921 Carlos Dominguez = $1.10m 752 / 2921 Mario Dominguez = - 753 / 2921 Nicolás Domínguez = $14.30m 754 / 2921 John Donald = NaN 755 / 2921 Lee Dongjun = NaN 756 / 2921 Anastasios Donis = $1.10m 757 / 2921 Gianluigi Donnarumma = NaN 758 / 2921 Niklas Dorsch = $11.00m 759 / 2921 Gabriel Dos Santos = $41.80m 760 / 2921 Jodel Dossou = $1.98m 761 / 2921 Lucas Douath = NaN 762 / 2921 Lohann Doucet = $165Th. 763 / 2921 Abdoulaye Doucouré = $24.20m 764 / 2921 Cheick Doucouré = $16.50m 765 / 2921 Fodé Doucouré = NaN 766 / 2921 Ismaël Doukouré = $1.65m 767 / 2921 Kamory Doumbia = $1.10m 768 / 2921 Moussa Doumbia = $1.32m 769 / 2921 Souleyman Doumbia = $3.30m 770 / 2921 Kieran Dowell = $2.75m 771 / 2921 Bartłomiej Drągowski = $6.60m 772 / 2921 Radu Drăgușin = NaN 773 / 2921 Radu Drăgușin = $3.85m 774 / 2921 Cody Drameh = $3.30m 775 / 2921 Julian Draxler = NaN 776 / 2921 Matthieu Dreyer = $330Th. 777 / 2921 Domingos Duarte = $8.80m 778 / 2921 Óscar Duarte = $880Th. 779 / 2921 Rubén Duarte = $3.30m 780 / 2921 Leo Dubois = $11.00m 781 / 2921 Martin Dúbravka = NaN 782 / 2921 Ondrej Duda = $4.40m 783 / 2921 Jeremy Dudziak = $1.76m 784 / 2921 Shane Duffy = $5.50m 785 / 2921 Unai Dufur = $220Th. 786 / 2921 Denzel Dumfries = $27.50m 787 / 2921 Paul Dummett = NaN 788 / 2921 Alfred Duncan = $9.35m 789 / 2921 Lewis Dunk = $22.00m 790 / 2921 Erik Durm = NaN 791 / 2921 Hugo Duro = NaN 792 / 2921 Hugo Duro = $11.00m 793 / 2921 Jean-Kevin Duverne = $4.40m 794 / 2921 Paulo Dybala = $38.50m 795 / 2921 Edin Džeko = $4.40m 796 / 2921 Enzo Ebosse = $2.20m 797 / 2921 Tyronne Ebuehi = $1.54m 798 / 2921 Ederson = NaN 799 / 2921 Éderson = NaN 800 / 2921 Odsonne Édouard = $18.70m 801 / 2921 CJ Egan-Riley = $880Th. 802 / 2921 Maximilian Eggestein = $8.80m 803 / 2921 Lilian Egloff = $880Th. 804 / 2921 Kingsley Ehizibue = $1.43m 805 / 2921 Julian Eitschberger = - 806 / 2921 Albin Ekdal = $1.10m 807 / 2921 Hugo Ekitike = $30.80m 808 / 2921 Jurgen Ekkelenkamp = $3.85m 809 / 2921 Caleb Ekuban = $1.98m 810 / 2921 Anthony Elanga = NaN 811 / 2921 Alberth Elis = $7.15m 812 / 2921 Harvey Elliott = $24.20m 813 / 2921 Elif Elmas = $26.40m 814 / 2921 Mohamed Elneny = $12.10m 815 / 2921 Aritz Elustondo = $22.00m 816 / 2921 Nico Elvedi = NaN 817 / 2921 Sepe Elye Wahi = NaN 818 / 2921 Mohamed Elyounoussi = $13.20m 819 / 2921 Adri Embarba = $4.40m 820 / 2921 Breel Embolo = NaN 821 / 2921 Emerson = NaN 822 / 2921 Emerson = NaN 823 / 2921 Renaud Emond = NaN 824 / 2921 Youssef En-Nesyri = $27.50m 825 / 2921 Keita Endo = $990Th. 826 / 2921 Wataru Endo = $8.80m 827 / 2921 Christian Eriksen = $22.00m 828 / 2921 Martin Erlic = $6.05m 829 / 2921 Gonzalo Escalante = $2.75m 830 / 2921 Gonzalo Escalante = NaN 831 / 2921 Aarón Escandell = $1.10m 832 / 2921 Sergio Escudero = $1.98m 833 / 2921 Alfonso Espino = $6.60m 834 / 2921 Michael Esser = $440Th. 835 / 2921 Estanis = NaN 836 / 2921 Maxime Estève = $4.95m 837 / 2921 Pervis Estupiñán = $22.00m 838 / 2921 Oghenekaro Etebo = NaN 839 / 2921 Jonny Evans = $4.40m 840 / 2921 Eberechi Eze = $24.20m 841 / 2921 Abdessamad Ezzalzouli = $8.80m 842 / 2921 Łukasz Fabiański = $1.10m 843 / 2921 Fabinho = NaN 844 / 2921 Fábio = NaN 845 / 2921 Cesc Fàbregas = $2.75m 846 / 2921 Wout Faes = $11.00m 847 / 2921 Wahidullah Faghir = $3.30m 848 / 2921 Romain Faivre = $16.50m 849 / 2921 Romain Faivre = NaN 850 / 2921 Radamel Falcao = $2.20m 851 / 2921 Diego Falcinelli = $880Th. 852 / 2921 Wladimiro Falcone = $3.30m 853 / 2921 Fali = NaN 854 / 2921 Paolo Faragò = NaN 855 / 2921 Omar Faraj = $110Th. 856 / 2921 Davide Faraoni = $5.50m 857 / 2921 Mohamed Fares = NaN 858 / 2921 Diego Farias = NaN 859 / 2921 Wuilker Faríñez = $4.40m 860 / 2921 Ömer Faruk Beyaz = NaN 861 / 2921 Noah Fatar = $330Th. 862 / 2921 Ansu Fati = $66.00m 863 / 2921 Julien Faussurier = $330Th. 864 / 2921 Andrea Favilli = NaN 865 / 2921 Federico Fazio = $660Th. 866 / 2921 Aleix Febas = NaN 867 / 2921 Adrian Fein = NaN 868 / 2921 Nabil Fekir = $44.00m 869 / 2921 Felipe = NaN 870 / 2921 Luiz Felipe = $17.60m 871 / 2921 Ohis Felix Uduokhai = NaN 872 / 2921 João Félix = $77.00m 873 / 2921 Kiko Femenía = $2.75m 874 / 2921 Evan Ferguson = $660Th. 875 / 2921 Nathan Ferguson = $2.75m 876 / 2921 Bruno Fernandes = NaN 877 / 2921 Edimilson Fernandes = NaN 878 / 2921 Aitor Fernández = $2.75m 879 / 2921 Álex Fernández = $6.60m 880 / 2921 Álvaro Fernández = $4.40m 881 / 2921 Federico Fernández = NaN 882 / 2921 Fernandinho = $1.65m 883 / 2921 Fernando = $4.40m 884 / 2921 Alex Ferrari = $1.98m 885 / 2921 Salvador Ferrer = $1.43m 886 / 2921 Jordan Ferri = $5.50m 887 / 2921 Riccardo Fiamozzi = $550Th. 888 / 2921 Fidel = NaN 889 / 2921 Karol Fila = $1.32m 890 / 2921 Alfreð Finnbogason = $770Th. 891 / 2921 Luca Fiordilino = $1.10m 892 / 2921 Vincenzo Fiorillo = $330Th. 893 / 2921 Roberto Firmino = $35.20m 894 / 2921 Junior Firpo = $13.20m 895 / 2921 Mark Flekken = $7.70m 896 / 2921 Ashley Fletcher = NaN 897 / 2921 Alexis Flips = $2.75m 898 / 2921 Alessandro Florenzi = $6.05m 899 / 2921 Phil Foden = $99.00m 900 / 2921 Mamadou Fofana = NaN 901 / 2921 Seko Fofana = $27.50m 902 / 2921 Wesley Fofana = $44.00m 903 / 2921 Youssouf Fofana = $19.80m 904 / 2921 Thomas Foket = $5.50m 905 / 2921 Thomas Fontaine = NaN 906 / 2921 José Fontán = $1.10m 907 / 2921 José Fonte = $880Th. 908 / 2921 Fernando Forestieri = NaN 909 / 2921 Pablo Fornals = $24.20m 910 / 2921 Emil Forsberg = $12.10m 911 / 2921 Adam Forshaw = $2.20m 912 / 2921 Marcus Forss = $4.40m 913 / 2921 Fraser Forster = $2.20m 914 / 2921 Philipp Förster = $2.75m 915 / 2921 Francesco Forte = NaN 916 / 2921 Steven Fortes = NaN 917 / 2921 Ben Foster = $330Th. 918 / 2921 Tariqe Fosu = $2.20m 919 / 2921 Timothy Fosu-Mensah = $4.40m 920 / 2921 Dimitri Foulquier = NaN 921 / 2921 Dimitri Foulquier = $4.40m 922 / 2921 Juan Foyth = $27.50m 923 / 2921 Gianluca Frabotta = $2.20m 924 / 2921 Raphael Framberger = $1.65m 925 / 2921 Przemysław Frankowski = $8.80m 926 / 2921 Enric Franquesa = $880Th. 927 / 2921 Fransérgio = NaN 928 / 2921 Ryan Fraser = NaN 929 / 2921 Davide Frattesi = $22.00m 930 / 2921 Fred = NaN 931 / 2921 Ryan Fredericks = $1.65m 932 / 2921 Morten Frendrup = $4.07m 933 / 2921 Remo Freuler = $22.00m 934 / 2921 Marvin Friedrich = NaN 935 / 2921 Marvin Friedrich = NaN 936 / 2921 Jeremie Frimpong = $22.00m 937 / 2921 Christian Früchtl = $660Th. 938 / 2921 Jorge de Frutos = $11.00m 939 / 2921 Leo Fuhr Hjelde = NaN 940 / 2921 Chris Führich = $4.40m 941 / 2921 Angelo Fulgini = $13.20m 942 / 2921 Marius Funk = $330Th. 943 / 2921 Stephan Fürstner = $83Th. 944 / 2921 Matteo Gabbia = $6.60m 945 / 2921 Manolo Gabbiadini = $4.40m 946 / 2921 Mijat Gaćinović = NaN 947 / 2921 Gianluca Gaetano = NaN 948 / 2921 Luca Gagliano = $275Th. 949 / 2921 Roberto Gagliardini = $8.80m 950 / 2921 Riccardo Gagliolo = $880Th. 951 / 2921 Javi Galán = $13.20m 952 / 2921 Iñigo Ruiz de Galarreta = $1.98m 953 / 2921 Nicolas Galazzi = NaN 954 / 2921 Pablo Galdames Millán = NaN 955 / 2921 Thiago Galhardo = $2.20m 956 / 2921 Conor Gallagher = NaN 957 / 2921 Gauthier Gallon = $2.75m 958 / 2921 Cristian Gamboa = $770Th. 959 / 2921 Kévin Gameiro = $2.20m 960 / 2921 Idrissa Gana Gueye = NaN 961 / 2921 Ignatius Ganago = $5.50m 962 / 2921 Silvère Ganvoula M'Boussy = NaN 963 / 2921 Álvaro García = $6.60m 964 / 2921 Dani García = NaN 965 / 2921 David García = $22.00m 966 / 2921 Eric García = $19.80m 967 / 2921 Francisco Garcia = $8.25m 968 / 2921 Joan García = $440Th. 969 / 2921 Manu García = $3.30m 970 / 2921 Raúl García = NaN 971 / 2921 Rubén García = $8.80m 972 / 2921 Saúl García = $660Th. 973 / 2921 Unai García = $1.65m 974 / 2921 Alejandro Garnacho = NaN 975 / 2921 Mario Gaspar = $3.30m 976 / 2921 Djeidi Gassama = NaN 977 / 2921 Johan Gastien = $880Th. 978 / 2921 Dwight Gayle = NaN 979 / 2921 Jean-Philippe Gbamin = NaN 980 / 2921 David de Gea = NaN 981 / 2921 Linus Gechter = $4.95m 982 / 2921 Dennis Geiger = $9.90m 983 / 2921 Joe Gelhardt = $6.60m 984 / 2921 Luca Gemello = $330Th. 985 / 2921 Yannick Gerhardt = $6.60m 986 / 2921 Valère Germain = $2.75m 987 / 2921 Gerson = NaN 988 / 2921 Willem Geubbels = $4.40m 989 / 2921 Hamadi Al Ghaddioui = NaN 990 / 2921 Ismaël Gharbi = NaN 991 / 2921 Anwar El Ghazi = NaN 992 / 2921 Anwar El Ghazi = $9.90m 993 / 2921 Lamine Ghezali = $275Th. 994 / 2921 Paolo Ghiglione = $2.20m 995 / 2921 Saman Ghoddos = $2.75m 996 / 2921 Faouzi Ghoulam = $1.54m 997 / 2921 Dimitris Giannoulis = $5.50m 998 / 2921 Morgan Gibbs-White = NaN 999 / 2921 Ben Gibson = $6.60m 1000 / 2921 Niko Gießelmann = $2.53m 1001 / 2921 Rafał Gikiewicz = $1.32m 1002 / 2921 Óscar Gil = $3.30m 1003 / 2921 Mario Gila = $550Th. 1004 / 2921 Billy Gilmour = NaN 1005 / 2921 Daniel Ginczek = NaN 1006 / 2921 Matthias Ginter = NaN 1007 / 2921 Nicholas Gioacchini = $1.65m 1008 / 2921 Sebastian Giovinco = $550Th. 1009 / 2921 Jimmy Giraudon = NaN 1010 / 2921 Andrei Girotto = $5.50m 1011 / 2921 Olivier Giroud = $3.85m 1012 / 2921 Serge Gnabry = $71.50m 1013 / 2921 Ben Godfrey = $22.00m 1014 / 2921 Diego Godín = NaN 1015 / 2921 Edoardo Goldaniga = $1.10m 1016 / 2921 Edoardo Goldaniga = NaN 1017 / 2921 Aleksandr Golovin = $27.50m 1018 / 2921 André Gomes = $19.80m 1019 / 2921 Angel Gomes = $7.70m 1020 / 2921 Toti Gomes = NaN 1021 / 2921 Dani Gómez = $2.75m 1022 / 2921 Joe Gomez = $19.80m 1023 / 2921 Maxi Gómez = $13.20m 1024 / 2921 Moi Gómez = $8.80m 1025 / 2921 Papu Gómez = NaN 1026 / 2921 Sergi Gómez = $3.30m 1027 / 2921 Alfred Gomis = $8.80m 1028 / 2921 Maxime Gonalons = $1.98m 1029 / 2921 Vagner Gonçalves = NaN 1030 / 2921 Cedric Gondo = NaN 1031 / 2921 Álvaro González = $2.75m 1032 / 2921 Diego González = $2.20m 1033 / 2921 Édgar González = $6.60m 1034 / 2921 Giovanni González = $1.65m 1035 / 2921 Nicolás González = $22.00m 1036 / 2921 Nicolás González = $27.50m 1037 / 2921 Peter González = $1.10m 1038 / 2921 Roberto González = NaN 1039 / 2921 Charlie Goode = $990Th. 1040 / 2921 Anthony Gordon = $22.00m 1041 / 2921 Kaide Gordon = $1.65m 1042 / 2921 Leon Goretzka = $71.50m 1043 / 2921 Gori = NaN 1044 / 2921 Andoni Gorosabel = $11.00m 1045 / 2921 Robin Gosens = NaN 1046 / 2921 Robin Gosens = $30.80m 1047 / 2921 Dan Gosling = $1.10m 1048 / 2921 Amine Gouiri = $46.20m 1049 / 2921 Jeffrey Gouweleeuw = $3.85m 1050 / 2921 Jonathan Gradit = $4.95m 1051 / 2921 Jens Grahl = NaN 1052 / 2921 Alberto Grassi = $2.75m 1053 / 2921 Jaume Grau = NaN 1054 / 2921 Andrew Gravillon = $7.15m 1055 / 2921 Demarai Gray = $24.20m 1056 / 2921 Adrian Grbić = NaN 1057 / 2921 Ivo Grbić = $3.85m 1058 / 2921 Jack Grealish = $77.00m 1059 / 2921 Etienne Green = $7.70m 1060 / 2921 Julian Green = $1.10m 1061 / 2921 Mason Greenwood = NaN 1062 / 2921 Sam Greenwood = $2.75m 1063 / 2921 Michael Gregoritsch = $4.95m 1064 / 2921 Dominik Greif = $2.20m 1065 / 2921 Clément Grenier = $1.10m 1066 / 2921 Sebastian Griesbeck = $770Th. 1067 / 2921 Sebastian Griesbeck = NaN 1068 / 2921 Antoine Griezmann = NaN 1069 / 2921 Antoine Griezmann = $38.50m 1070 / 2921 Vincenzo Grifo = $13.20m 1071 / 2921 Lennart Grill = $1.10m 1072 / 2921 Florian Grillitsch = $17.60m 1073 / 2921 Arnaut Groeneveld = NaN 1074 / 2921 Pascal Groß = $6.60m 1075 / 2921 Carlos Gruezo = $3.52m 1076 / 2921 Vicente Guaita = $1.65m 1077 / 2921 Andrés Guardado = $1.65m 1078 / 2921 Sergi Guardiola = $3.30m 1079 / 2921 Nemanja Gudelj = $4.40m 1080 / 2921 Gabriel Gudmundsson = $6.60m 1081 / 2921 Noah Guede-Nadje = NaN 1082 / 2921 Gonçalo Guedes = $44.00m 1083 / 2921 Marc Guéhi = $35.20m 1084 / 2921 Mattéo Guendouzi = $27.50m 1085 / 2921 Yanis Guermouche = $275Th. 1086 / 2921 Raphaël Guerreiro = $27.50m 1087 / 2921 Evann Guessand = $3.30m 1088 / 2921 Ander Guevara = $5.50m 1089 / 2921 Lamine Gueye = NaN 1090 / 2921 Pape Gueye = $13.20m 1091 / 2921 John Guidetti = $1.10m 1092 / 2921 Josuha Guilavogui = $3.85m 1093 / 2921 Josuha Guilavogui = NaN 1094 / 2921 Frederic Guilbert = $7.70m 1095 / 2921 Hugo Guillamón = $22.00m 1096 / 2921 Bruno Guimarães = NaN 1097 / 2921 Bruno Guimarães = NaN 1098 / 2921 Sehrou Guirassy = $11.00m 1099 / 2921 Péter Gulácsi = $8.80m 1100 / 2921 Manuel Gulde = $1.87m 1101 / 2921 Gerard Gumbau = $3.30m 1102 / 2921 Robert Gumny = $2.75m 1103 / 2921 İlkay Gündoğan = $27.50m 1104 / 2921 Angus Gunn = $3.30m 1105 / 2921 Christian Günter = $13.20m 1106 / 2921 Koray Günter = $5.50m 1107 / 2921 Lasse Günther = $1.10m 1108 / 2921 Jon Guridi = $1.32m 1109 / 2921 Malo Gusto = $13.20m 1110 / 2921 Raúl Guti = $4.40m 1111 / 2921 Marcos Mauro López Gutiérrez = NaN 1112 / 2921 Miguel Gutiérrez = $6.60m 1113 / 2921 Albert Guðmundsson = $2.64m 1114 / 2921 Joško Gvardiol = $38.50m 1115 / 2921 Emmanuel Gyasi = $2.75m 1116 / 2921 Norbert Gyömbér = $1.10m 1117 / 2921 Erling Haaland = $165.00m 1118 / 2921 Nicolas Haas = $3.30m 1119 / 2921 Janik Haberer = $3.85m 1120 / 2921 Alexander Hack = $2.75m 1121 / 2921 Robin Hack = $2.20m 1122 / 2921 Munir El Haddadi = $8.80m 1123 / 2921 André Hahn = $2.20m 1124 / 2921 Amadou Haidara = $26.40m 1125 / 2921 Massadio Haïdara = $2.20m 1126 / 2921 Oualid El Hajjam = $1.10m 1127 / 2921 Achraf Hakimi = NaN 1128 / 2921 Marcel Halstenberg = $5.50m 1129 / 2921 Pierre-Yves Hamel = NaN 1130 / 2921 Pierre-Yves Hamel = $1.32m 1131 / 2921 Romain Hamouma = $1.10m 1132 / 2921 Samir Handanović = $2.20m 1133 / 2921 Grant Hanley = $3.85m 1134 / 2921 Ridgeciano Haps = $1.98m 1135 / 2921 Genki Haraguchi = $2.75m 1136 / 2921 Amine Harit = $11.00m 1137 / 2921 Varazdat Haroyan = $1.32m 1138 / 2921 Jack Harrison = $19.80m 1139 / 2921 Abdou Harroui = $3.30m 1140 / 2921 Luis Hartwig = $220Th. 1141 / 2921 Makoto Hasebe = NaN 1142 / 2921 Hans Hateboer = $14.30m 1143 / 2921 Kortney Hause = $4.40m 1144 / 2921 Kai Havertz = $77.00m 1145 / 2921 Isaac Hayden = NaN 1146 / 2921 Eden Hazard = $13.20m 1147 / 2921 Thorgan Hazard = $16.50m 1148 / 2921 Jonas Hector = $3.85m 1149 / 2921 Hwang Hee-chan = NaN 1150 / 2921 Hwang Hee-chan = NaN 1151 / 2921 Silvan Hefti = $5.50m 1152 / 2921 Dominique Heintz = $2.75m 1153 / 2921 Dominique Heintz = NaN 1154 / 2921 Jordan Henderson = $16.50m 1155 / 2921 Liam Henderson = $3.08m 1156 / 2921 Jeff Hendrick = NaN 1157 / 2921 Wayne Hennessey = $550Th. 1158 / 2921 Benjamin Henrichs = $15.40m 1159 / 2921 Henrique = NaN 1160 / 2921 Dalbert Henrique = NaN 1161 / 2921 Luis Henrique = $6.60m 1162 / 2921 Matheus Henrique = $12.10m 1163 / 2921 Rico Henry = $22.00m 1164 / 2921 Thomas Henry = $5.50m 1165 / 2921 Christophe Hérelle = $4.40m 1166 / 2921 Jérôme Hergault = $275Th. 1167 / 2921 Kike Hermoso = $330Th. 1168 / 2921 Mario Hermoso = $22.00m 1169 / 2921 Aridane Hernández = $1.65m 1170 / 2921 Lucas Hernández = $55.00m 1171 / 2921 Luis Hernández = $880Th. 1172 / 2921 Mario Hernández = $880Th. 1173 / 2921 Theo Hernández = $60.50m 1174 / 2921 Hernani = $3.30m 1175 / 2921 Ander Herrera = NaN 1176 / 2921 Héctor Herrera = $5.50m 1177 / 2921 Sergio Herrera = $8.80m 1178 / 2921 Yangel Herrera = $15.40m 1179 / 2921 Patrick Herrmann = NaN 1180 / 2921 Son Heung-min = NaN 1181 / 2921 Daan Heymans = NaN 1182 / 2921 Aaron Hickey = $19.80m 1183 / 2921 Piero Hincapié = $18.70m 1184 / 2921 Martin Hinteregger = NaN 1185 / 2921 Marwin Hitz = $1.10m 1186 / 2921 Ki-Jana Hoever = NaN 1187 / 2921 Nicolas Höfler = $2.75m 1188 / 2921 Jonas Hofmann = NaN 1189 / 2921 Rob Holding = $11.00m 1190 / 2921 Lucas Höler = $7.15m 1191 / 2921 Mason Holgate = $19.80m 1192 / 2921 Gerrit Holtmann = $4.95m 1193 / 2921 Martin Hongla = $4.40m 1194 / 2921 Franck Honorat = $11.00m 1195 / 2921 Justin Hoogma = NaN 1196 / 2921 Sydney van Hooijdonk = NaN 1197 / 2921 Matthew Hoppe = $1.10m 1198 / 2921 Jannes Horn = $1.98m 1199 / 2921 Timo Horn = $2.20m 1200 / 2921 Fraser Hornby = $1.10m 1201 / 2921 Cédric Hountondji = $3.30m 1202 / 2921 Lukáš Hrádecký = $5.50m 1203 / 2921 Branimir Hrgota = $2.20m 1204 / 2921 Petko Hristov = $1.10m 1205 / 2921 Ajdin Hrustic = NaN 1206 / 2921 Timo Hübers = $8.25m 1207 / 2921 Benjamin Hübner = $1.10m 1208 / 2921 Callum Hudson-Odoi = $27.50m 1209 / 2921 Will Hughes = $6.60m 1210 / 2921 Mats Hummels = $7.15m 1211 / 2921 Elseid Hysaj = $5.50m 1212 / 2921 Suk Hyun-jun = NaN 1213 / 2921 Pierre Højbjerg = $44.00m 1214 / 2921 Iago = NaN 1215 / 2921 Robert Ibáñez = NaN 1216 / 2921 Roger Ibanez = $25.30m 1217 / 2921 Vicente Iborra = $2.20m 1218 / 2921 Zlatan Ibrahimović = $3.30m 1219 / 2921 Mauro Icardi = NaN 1220 / 2921 Adam Idah = $3.30m 1221 / 2921 Oussama Idrissi = NaN 1222 / 2921 Oussama Idrissi = $4.40m 1223 / 2921 Iglesias = NaN 1224 / 2921 Borja Iglesias = $16.50m 1225 / 2921 Jonathan Iglesias = NaN 1226 / 2921 Juan Ignacio Ramírez = NaN 1227 / 2921 Igor = NaN 1228 / 2921 Kelechi Iheanacho = $22.00m 1229 / 2921 Danylo Ihnatenko = NaN 1230 / 2921 Jonathan Ikone = NaN 1231 / 2921 Jonathan Ikone = $19.80m 1232 / 2921 Ivan Ilić = $15.40m 1233 / 2921 Josip Iličić = $1.10m 1234 / 2921 Asier Illarramendi = $3.30m 1235 / 2921 Stefan Ilsanker = NaN 1236 / 2921 Ciro Immobile = $29.70m 1237 / 2921 Burak İnce = $1.65m 1238 / 2921 Danny Ings = $22.00m 1239 / 2921 Marcus Ingvartsen = NaN 1240 / 2921 Marcus Ingvartsen = $2.75m 1241 / 2921 Bonke Innocent = $2.20m 1242 / 2921 Lorenzo Insigne = $27.50m 1243 / 2921 Nikita Iosifov = $1.10m 1244 / 2921 Tim Iroegbunam = $2.75m 1245 / 2921 Alexander Isak = $33.00m 1246 / 2921 Isco = NaN 1247 / 2921 Wilson Isidor = NaN 1248 / 2921 Ardian Ismajli = $1.98m 1249 / 2921 Hiroki Ito = $4.95m 1250 / 2921 Cedric Itten = NaN 1251 / 2921 Gian-Luca Itter = NaN 1252 / 2921 Alex Iwobi = $19.80m 1253 / 2921 Armando Izzo = $3.08m 1254 / 2921 Nicolas Jackson = $550Th. 1255 / 2921 Lee Jae-sung = NaN 1256 / 2921 Paul Jaeckel = $5.50m 1257 / 2921 Mato Jajalo = $440Th. 1258 / 2921 Kristijan Jakić = NaN 1259 / 2921 Ismail Jakobs = $7.70m 1260 / 2921 Marin Jakoliš = $1.32m 1261 / 2921 Abdel Jalil Medioub = NaN 1262 / 2921 Daniel James = NaN 1263 / 2921 Daniel James = $19.80m 1264 / 2921 Reece James = $66.00m 1265 / 2921 Vitaly Janelt = $15.40m 1266 / 2921 Jakub Jankto = $4.40m 1267 / 2921 Pontus Jansson = $7.70m 1268 / 2921 Tony Jantschke = NaN 1269 / 2921 Adnan Januzaj = $13.20m 1270 / 2921 Paweł Jaroszyński = $660Th. 1271 / 2921 Jason = NaN 1272 / 2921 Jason = NaN 1273 / 2921 Dennis Jastrzembski = NaN 1274 / 2921 Luis Javier Suárez = NaN 1275 / 2921 Corentin Jean = $1.32m 1276 / 2921 Jemerson = NaN 1277 / 2921 Fredrik Jensen = $1.65m 1278 / 2921 Mathias Jensen = $11.00m 1279 / 2921 Moritz Jenz = $2.75m 1280 / 2921 Gabriel Jesus = $55.00m 1281 / 2921 Juan Jesus = $4.40m 1282 / 2921 Álvaro Jiménez = NaN 1283 / 2921 Raúl Jiménez = NaN 1284 / 2921 Joaquín = NaN 1285 / 2921 Joelinton = NaN 1286 / 2921 Jofre = NaN 1287 / 2921 Marco John = $2.75m 1288 / 2921 Dennis Johnsen = $1.54m 1289 / 2921 Ben Johnson = $9.90m 1290 / 2921 Curtis Jones = $30.80m 1291 / 2921 Phil Jones = NaN 1292 / 2921 Frenkie de Jong = $66.00m 1293 / 2921 Luuk de Jong = $4.40m 1294 / 2921 Joan Jordán = $24.20m 1295 / 2921 Kaio Jorge = $7.70m 1296 / 2921 Jorginho = NaN 1297 / 2921 Josan = NaN 1298 / 2921 Willian José = $13.20m 1299 / 2921 Joselu = NaN 1300 / 2921 Josema = NaN 1301 / 2921 Lenny Joseph = $550Th. 1302 / 2921 Diogo Jota = $66.00m 1303 / 2921 Stevan Jovetić = $2.75m 1304 / 2921 Luka Jović = $17.60m 1305 / 2921 Miguel Juan Llambrich = $880Th. 1306 / 2921 José Juan Macías = NaN 1307 / 2921 Juanmi = NaN 1308 / 2921 Gideon Jung = $770Th. 1309 / 2921 Flavio Junior Bianchi = NaN 1310 / 2921 Hamed Junior Traorè = NaN 1311 / 2921 Lago Junior = NaN 1312 / 2921 Vinicius Júnior = $110.00m 1313 / 2921 James Justin = $27.50m 1314 / 2921 Jutglà = NaN 1315 / 2921 Jens Jønsson = $4.40m 1316 / 2921 Mathias Jørgensen = $1.32m 1317 / 2921 Ozan Kabak = $11.00m 1318 / 2921 Christian Kabasele = $3.30m 1319 / 2921 Issa Kaboré = $4.40m 1320 / 2921 Anton Kade = $825Th. 1321 / 2921 Pavel Kadeřábek = $5.50m 1322 / 2921 Tino Kadewere = $6.60m 1323 / 2921 Florian Kainz = $3.85m 1324 / 2921 Gaël Kakuta = $7.70m 1325 / 2921 Sasa Kalajdzic = $27.50m 1326 / 2921 Arnaud Kalimuendo = NaN 1327 / 2921 Arnaud Kalimuendo = $19.80m 1328 / 2921 Nikola Kalinić = NaN 1329 / 2921 Yayah Kallon = $1.65m 1330 / 2921 Felix Kalu Nmecha = NaN 1331 / 2921 Samuel Kalu = $3.30m 1332 / 2921 Samuel Kalu = NaN 1333 / 2921 Pierre Kalulu = $30.80m 1334 / 2921 Daichi Kamada = NaN 1335 / 2921 Boubacar Kamara = $27.50m 1336 / 2921 Hassane Kamara = $4.40m 1337 / 2921 Hassane Kamara = NaN 1338 / 2921 Dimitrije Kamenović = $1.65m 1339 / 2921 Kevin Kampl = $6.60m 1340 / 2921 Jean-Armel Kana-Biyik = $550Th. 1341 / 2921 Nordine Kandil = $440Th. 1342 / 2921 Harry Kane = $99.00m 1343 / 2921 Lee Kangin = NaN 1344 / 2921 N'Golo Kanté = $44.00m 1345 / 2921 Stefanos Kapino = $770Th. 1346 / 2921 Atakan Karazor = $4.95m 1347 / 2921 Rick Karsdorp = $14.30m 1348 / 2921 Denso Kasius = $2.20m 1349 / 2921 Grigoris Kastanos = $1.65m 1350 / 2921 Silas Katompa = $16.50m 1351 / 2921 Noah Katterbach = NaN 1352 / 2921 Eiji Kawashima = $220Th. 1353 / 2921 Edo Kayembe = $3.30m 1354 / 2921 Moise Kean = $22.00m 1355 / 2921 Moise Kean = $26.40m 1356 / 2921 Michael Keane = $22.00m 1357 / 2921 Ilan Kebbal = $4.95m 1358 / 2921 Wajdi Kechrida = $880Th. 1359 / 2921 Thilo Kehrer = NaN 1360 / 2921 Habib Keita = $880Th. 1361 / 2921 Naby Keïta = $27.50m 1362 / 2921 Yannik Keitel = $4.40m 1363 / 2921 Caoimhín Kelleher = $8.80m 1364 / 2921 Marc-Oliver Kempf = $4.95m 1365 / 2921 Marc-Oliver Kempf = NaN 1366 / 2921 Kenedy = NaN 1367 / 2921 Jonjoe Kenny = $4.40m 1368 / 2921 Dimitrios Keramitsis = - 1369 / 2921 Franck Kessié = $49.50m 1370 / 2921 Saîf-Eddine Khaoui = $1.65m 1371 / 2921 Wahbi Khazri = $4.40m 1372 / 2921 Rani Khedira = $6.60m 1373 / 2921 Kike = NaN 1374 / 2921 Luca Kilian = NaN 1375 / 2921 Luca Kilian = $4.95m 1376 / 2921 Max Kilman = NaN 1377 / 2921 Joshua Kimmich = $88.00m 1378 / 2921 Presnel Kimpembe = NaN 1379 / 2921 Joshua King = $8.80m 1380 / 2921 Jakub Kiwior = $3.30m 1381 / 2921 Sofian Kiyine = $2.31m 1382 / 2921 Simon Kjær = NaN 1383 / 2921 Kristoffer Klaesson = $2.20m 1384 / 2921 Philipp Klement = NaN 1385 / 2921 Mateusz Klich = $3.30m 1386 / 2921 Thibault Klidje = $330Th. 1387 / 2921 Mateo Klimowicz = $2.20m 1388 / 2921 Fabian Klos = $440Th. 1389 / 2921 Lukas Klostermann = $19.80m 1390 / 2921 Justin Kluivert = $16.50m 1391 / 2921 Lukas Klünter = $1.32m 1392 / 2921 Ansgar Knauff = NaN 1393 / 2921 Ansgar Knauff = NaN 1394 / 2921 Robin Knoche = $5.50m 1395 / 2921 Gregor Kobel = $24.20m 1396 / 2921 Robin Koch = $17.60m 1397 / 2921 Samuel Koeberlé = $165Th. 1398 / 2921 Philippe Koffi = NaN 1399 / 2921 Dominik Kohr = $5.50m 1400 / 2921 Koba Koindredi = $1.10m 1401 / 2921 Koke = NaN 1402 / 2921 Aleksandr Kokorin = $880Th. 1403 / 2921 Aleksandar Kolarov = $550Th. 1404 / 2921 Sead Kolašinac = NaN 1405 / 2921 Sead Kolašinac = $3.30m 1406 / 2921 Luca Koleosho = - 1407 / 2921 Randal Kolo Muani = $17.60m 1408 / 2921 Timothée Kolodziejczak = $2.75m 1409 / 2921 Ghislain Konan = $7.70m 1410 / 2921 Ibrahima Konaté = $44.00m 1411 / 2921 Geoffrey Kondogbia = $22.00m 1412 / 2921 Ibrahima Koné = $4.95m 1413 / 2921 Kouadio Koné = NaN 1414 / 2921 Youssouf Koné = $2.20m 1415 / 2921 Ezri Konsa = $24.20m 1416 / 2921 Teun Koopmeiners = $27.50m 1417 / 2921 Laurent Koscielny = NaN 1418 / 2921 Odilon Kossonou = NaN 1419 / 2921 Filip Kostić = NaN 1420 / 2921 Rominigue Kouamé = $5.50m 1421 / 2921 Nianzou Kouassi = NaN 1422 / 2921 Kalidou Koulibaly = $38.50m 1423 / 2921 Jules Koundé = $66.00m 1424 / 2921 Christos Kourfalidis = $138Th. 1425 / 2921 Boubakar Kouyaté = NaN 1426 / 2921 Cheikhou Kouyaté = $4.40m 1427 / 2921 Mateo Kovačić = $46.20m 1428 / 2921 Viktor Kovalenko = $3.30m 1429 / 2921 Emil Krafth = NaN 1430 / 2921 Alex Král = $7.70m 1431 / 2921 Andrej Kramarić = $13.20m 1432 / 2921 Christoph Kramer = NaN 1433 / 2921 Jean-Philippe Krasso = NaN 1434 / 2921 Julian Kristoffersen = NaN 1435 / 2921 Toni Kroos = $22.00m 1436 / 2921 Florian Krüger = $1.98m 1437 / 2921 Tim Krul = $2.20m 1438 / 2921 Rade Krunić = $9.90m 1439 / 2921 Max Kruse = $3.85m 1440 / 2921 Max Kruse = NaN 1441 / 2921 Lukas Kübler = $2.53m 1442 / 2921 Takefusa Kubo = $8.25m 1443 / 2921 Juraj Kucka = $1.98m 1444 / 2921 Mykola Kukharevych = NaN 1445 / 2921 Dejan Kulusevski = $44.00m 1446 / 2921 Dejan Kulusevski = NaN 1447 / 2921 Marash Kumbulla = $17.60m 1448 / 2921 Fabian Kunze = $1.10m 1449 / 2921 Enock Kwateng = $3.30m 1450 / 2921 Grejohn Kyei = $1.32m 1451 / 2921 Giorgos Kyriakopoulos = $5.50m 1452 / 2921 Andrea La Mantia = $1.43m 1453 / 2921 Gaëtan Laborde = NaN 1454 / 2921 Gaëtan Laborde = $19.80m 1455 / 2921 Alexandre Lacazette = $16.50m 1456 / 2921 Tom Lacoux = $880Th. 1457 / 2921 Lenny Lacroix = $1.10m 1458 / 2921 Maxence Lacroix = $22.00m 1459 / 2921 Alban Lafont = $17.60m 1460 / 2921 Víctor Laguardia = $2.20m 1461 / 2921 Konrad Laimer = $30.80m 1462 / 2921 Stefan Lainer = NaN 1463 / 2921 Diego Lainez = $2.75m 1464 / 2921 Adam Lallana = $2.20m 1465 / 2921 Vassilis Lambropoulos = NaN 1466 / 2921 Érik Lamela = $17.60m 1467 / 2921 Didier Lamkel Zé = $3.85m 1468 / 2921 Sam Lammers = NaN 1469 / 2921 Sam Lammers = NaN 1470 / 2921 Tariq Lamptey = $19.80m 1471 / 2921 Manuel Lanzini = $13.20m 1472 / 2921 Aymeric Laporte = $49.50m 1473 / 2921 Julien Laporte = $3.30m 1474 / 2921 Yasser Larouci = $2.75m 1475 / 2921 Kevin Lasagna = $3.85m 1476 / 2921 Jamaal Lascelles = NaN 1477 / 2921 Bryan Lasme = $1.10m 1478 / 2921 Paul Lasne = $550Th. 1479 / 2921 Latasa = NaN 1480 / 2921 Toni Lato = $1.65m 1481 / 2921 Armand Lauriente = $7.70m 1482 / 2921 Darko Lazović = $4.40m 1483 / 2921 Manuel Lazzari = $16.50m 1484 / 2921 Théo Le Bris = $440Th. 1485 / 2921 Jérémy Le Douaron = $3.30m 1486 / 2921 Enzo Le Fée = $6.60m 1487 / 2921 Vincent Le Goff = $1.10m 1488 / 2921 Maxime Le Marchand = $1.32m 1489 / 2921 Robin Le Normand = $33.00m 1490 / 2921 Patrick Leal = - 1491 / 2921 Rafael Leão = $77.00m 1492 / 2921 Jean-Louis Leca = $550Th. 1493 / 2921 Jeremías Ledesma = $6.60m 1494 / 2921 Pierre Lees-Melou = $5.50m 1495 / 2921 Wu Lei = NaN 1496 / 2921 Maxim Leitsch = $5.50m 1497 / 2921 Lucas Leiva = $1.10m 1498 / 2921 Florian Lejeune = $2.20m 1499 / 2921 Iñigo Lekue = NaN 1500 / 2921 Thomas Lemar = $44.00m 1501 / 2921 Félix Lemaréchal = $660Th. 1502 / 2921 Mario Lemina = $9.90m 1503 / 2921 Fabien Lemoine = $660Th. 1504 / 2921 Tim Lemperle = $2.20m 1505 / 2921 Ruben Lendinez = NaN 1506 / 2921 Clément Lenglet = $13.20m 1507 / 2921 Aaron Lennon = $1.10m 1508 / 2921 Bernd Leno = $9.90m 1509 / 2921 Christopher Lenz = NaN 1510 / 2921 Léo Leroy = $1.65m 1511 / 2921 Alexandre Letellier = NaN 1512 / 2921 Robert Lewandowski = $49.50m 1513 / 2921 Jamie Leweling = $4.95m 1514 / 2921 Jamal Lewis = NaN 1515 / 2921 Luca Lezzerini = $550Th. 1516 / 2921 Ben Lhassine Kone = NaN 1517 / 2921 Yanis Lhery = $440Th. 1518 / 2921 Dimitri Liénard = $770Th. 1519 / 2921 Philipp Lienhart = $19.80m 1520 / 2921 Matthijs de Ligt = $77.00m 1521 / 2921 Isaac Lihadji = $3.85m 1522 / 2921 Anderson Lima = NaN 1523 / 2921 Andreas Linde = $990Th. 1524 / 2921 Victor Lindelöf = NaN 1525 / 2921 Jesper Lindstrøm = NaN 1526 / 2921 Karol Linetty = $3.85m 1527 / 2921 Jesse Lingard = NaN 1528 / 2921 Pol Lirola = $8.80m 1529 / 2921 Valentino Livramento = NaN 1530 / 2921 Dejan Ljubicic = $8.25m 1531 / 2921 Javier Llabrés = - 1532 / 2921 Diego Llorente = $19.80m 1533 / 2921 Marcos Llorente = $49.50m 1534 / 2921 Hugo Lloris = $7.70m 1535 / 2921 Giovani Lo Celso = NaN 1536 / 2921 Giovani Lo Celso = $24.20m 1537 / 2921 Julen Lobete = $5.50m 1538 / 2921 Stanislav Lobotka = $22.00m 1539 / 2921 Jürgen Locadia = NaN 1540 / 2921 Jürgen Locadia = $2.20m 1541 / 2921 Manuel Locatelli = $38.50m 1542 / 2921 Banzouzi Locko = $2.20m 1543 / 2921 Renan Lodi = $33.00m 1544 / 2921 Ruben Loftus-Cheek = $22.00m 1545 / 2921 Kevin Long = $1.10m 1546 / 2921 Shane Long = $880Th. 1547 / 2921 Sean Longstaff = NaN 1548 / 2921 Ademola Lookman = $11.00m 1549 / 2921 Anthony Lopes = $11.00m 1550 / 2921 David López = $550Th. 1551 / 2921 Diego López = $550Th. 1552 / 2921 Javi López = $770Th. 1553 / 2921 Maxime Lopez = $16.50m 1554 / 2921 Pau López = $13.20m 1555 / 2921 Unai López = $4.40m 1556 / 2921 Dion Lopy = $2.75m 1557 / 2921 Samuel Loric = $660Th. 1558 / 2921 Anthony Losilla = $550Th. 1559 / 2921 Jonas Lössl = $1.10m 1560 / 2921 Marcel Lotka = $1.43m 1561 / 2921 Jordan Lotomba = $7.70m 1562 / 2921 Johaneko Louisjean = $330Th. 1563 / 2921 Imran Louza = $9.90m 1564 / 2921 Matteo Lovato = NaN 1565 / 2921 Matteo Lovato = $7.70m 1566 / 2921 Eduard Löwen = $2.20m 1567 / 2921 Matthew Lowton = $1.32m 1568 / 2921 Anthony Lozano = NaN 1569 / 2921 Hirving Lozano = $33.00m 1570 / 2921 Jean Lucas = $8.80m 1571 / 2921 Anderson Lucoqui = $1.98m 1572 / 2921 José Luis Gayà = NaN 1573 / 2921 José Luis Morales = NaN 1574 / 2921 José Luis Palomino = NaN 1575 / 2921 Florentino Luís = NaN 1576 / 2921 Luismi = NaN 1577 / 2921 Douglas Luiz = $41.80m 1578 / 2921 Romelu Lukaku = $77.00m 1579 / 2921 Castello Lukeba = $22.00m 1580 / 2921 Dodi Lukebakio = NaN 1581 / 2921 Dodi Lukebakio = $8.25m 1582 / 2921 Saša Lukić = $16.50m 1583 / 2921 Levi Lumeka = NaN 1584 / 2921 Andriy Lunin = $2.75m 1585 / 2921 Andrey Lunyov = NaN 1586 / 2921 Sebastiano Luperto = $3.30m 1587 / 2921 Andreas Luthe = $880Th. 1588 / 2921 Lyanco = NaN 1589 / 2921 Charalambos Lykogiannis = $2.42m 1590 / 2921 Yannis M'Bemba = $220Th. 1591 / 2921 Alexis Mac Allister = $17.60m 1592 / 2921 Deiver Machado = $1.98m 1593 / 2921 Darwin Machís = $6.60m 1594 / 2921 Yvann Macon = $4.95m 1595 / 2921 James Maddison = $55.00m 1596 / 2921 Niki Mäenpää = $220Th. 1597 / 2921 Pablo Maffeo = $5.50m 1598 / 2921 Louis Mafouta = $990Th. 1599 / 2921 Giulio Maggiore = $9.35m 1600 / 2921 Matej Maglica = NaN 1601 / 2921 Francesco Magnanelli = $440Th. 1602 / 2921 Giangiacomo Magnani = NaN 1603 / 2921 Giangiacomo Magnani = $3.96m 1604 / 2921 Hugo Magnetti = $2.20m 1605 / 2921 Yohann Magnin = $2.20m 1606 / 2921 Harry Maguire = NaN 1607 / 2921 Riyad Mahrez = $38.50m 1608 / 2921 Arne Maier = $6.05m 1609 / 2921 Habib Maïga = $3.85m 1610 / 2921 Mike Maignan = $38.50m 1611 / 2921 Ainsley Maitland-Niles = NaN 1612 / 2921 Ainsley Maitland-Niles = $11.00m 1613 / 2921 Josh Maja = NaN 1614 / 2921 Abdul Majeed Waris = NaN 1615 / 2921 Lovro Majer = $22.00m 1616 / 2921 Jean-Victor Makengo = $8.25m 1617 / 2921 Béni Makouana = $880Th. 1618 / 2921 Nemanja Maksimović = $15.40m 1619 / 2921 Nikola Maksimović = $2.75m 1620 / 2921 Kévin Malcuit = $1.10m 1621 / 2921 Daniel Maldini = $2.20m 1622 / 2921 Youssef Maleh = $5.50m 1623 / 2921 Donyell Malen = $29.70m 1624 / 2921 Ruslan Malinovskyi = $30.80m 1625 / 2921 Hugo Mallo = $4.40m 1626 / 2921 Lennard Maloney = $385Th. 1627 / 2921 Mickael Malsa = $3.30m 1628 / 2921 Giorgi Mamardashvili = $11.00m 1629 / 2921 Rey Manaj = $1.65m 1630 / 2921 Hianga Mananga Mbock = NaN 1631 / 2921 Vincent Manceau = $880Th. 1632 / 2921 Gianluca Mancini = $23.10m 1633 / 2921 Leonardo Mancuso = NaN 1634 / 2921 Steve Mandanda = $1.65m 1635 / 2921 Reinildo Mandava = $24.20m 1636 / 2921 Reinildo Mandava = NaN 1637 / 2921 Aïssa Mandi = $6.60m 1638 / 2921 Rolando Mandragora = $11.00m 1639 / 2921 Anthony Mandrea = $1.10m 1640 / 2921 Sadio Mané = $77.00m 1641 / 2921 Eliaquim Mangala = $1.98m 1642 / 2921 Orel Mangala = $16.50m 1643 / 2921 Thomas Mangani = $660Th. 1644 / 2921 Ricardo Mangas = $1.65m 1645 / 2921 Kostas Manolas = NaN 1646 / 2921 Javier Manquillo = NaN 1647 / 2921 Myziane Maolida = NaN 1648 / 2921 Myziane Maolida = $3.30m 1649 / 2921 Sekou Mara = $3.30m 1650 / 2921 Maranhão = NaN 1651 / 2921 Nikola Maraš = $1.32m 1652 / 2921 Fernando Marçal = NaN 1653 / 2921 Marcelo = NaN 1654 / 2921 Marcelo = NaN 1655 / 2921 Marcelo = NaN 1656 / 2921 Solly March = $9.90m 1657 / 2921 Riccardo Marchizza = $2.20m 1658 / 2921 Gian Marco Ferrari = NaN 1659 / 2921 Iván Marcone = $2.20m 1660 / 2921 Óscar de Marcos = NaN 1661 / 2921 Davide Marfella = $55Th. 1662 / 2921 José Mari = $440Th. 1663 / 2921 Pablo Marí = NaN 1664 / 2921 Pablo Marí = $5.50m 1665 / 2921 José María Giménez = NaN 1666 / 2921 Mariano = NaN 1667 / 2921 Răzvan Marin = $13.20m 1668 / 2921 Guillermo Maripán = $16.50m 1669 / 2921 Mika Màrmol = $880Th. 1670 / 2921 Omar Marmoush = NaN 1671 / 2921 Omar Marmoush = $6.60m 1672 / 2921 Marquinhos = NaN 1673 / 2921 Roger Martí = $5.50m 1674 / 2921 Anthony Martial = NaN 1675 / 2921 Anthony Martial = $17.60m 1676 / 2921 Martín = NaN 1677 / 2921 Aarón Martín = $5.50m 1678 / 2921 Ander Martin = $330Th. 1679 / 2921 Andrés Martín = NaN 1680 / 2921 Carlos Martín = NaN 1681 / 2921 Iván Martín = NaN 1682 / 2921 Jonas Martin = $2.75m 1683 / 2921 Martinelli = NaN 1684 / 2921 Lucas Martínez Quarta = $13.20m 1685 / 2921 Emiliano Martínez = $30.80m 1686 / 2921 Iñigo Martínez = NaN 1687 / 2921 Javi Martínez = $2.75m 1688 / 2921 Josep Martinez = $2.42m 1689 / 2921 Lautaro Martínez = $82.50m 1690 / 2921 Pablo Martínez = NaN 1691 / 2921 Gelson Martins = $16.50m 1692 / 2921 Adam Marušić = $8.25m 1693 / 2921 Omar Mascarell = $4.40m 1694 / 2921 Andrea Masiello = $440Th. 1695 / 2921 Adam Masina = $3.30m 1696 / 2921 Erhan Mašović = $2.75m 1697 / 2921 Roberto Massimo = $2.20m 1698 / 2921 Arthur Masuaku = $5.50m 1699 / 2921 Jaime Mata = $3.30m 1700 / 2921 Juan Mata = NaN 1701 / 2921 Pape Matar Sarr = NaN 1702 / 2921 Eliot Matazo = $8.80m 1703 / 2921 Aleš Matějů = $1.10m 1704 / 2921 Jean-Philippe Mateta = $11.00m 1705 / 2921 Nemanja Matić = NaN 1706 / 2921 Joël Matip = $19.80m 1707 / 2921 Chrislain Matsima = $5.50m 1708 / 2921 Azor Matusiwa = $7.70m 1709 / 2921 Neal Maupay = $19.80m 1710 / 2921 Stephy Mavididi = $11.00m 1711 / 2921 Konstantinos Mavropanos = $16.50m 1712 / 2921 Eric Maxim Choupo-Moting = NaN 1713 / 2921 Luís Maximiano = $13.20m 1714 / 2921 Borja Mayoral = $9.90m 1715 / 2921 Borja Mayoral = NaN 1716 / 2921 Derek Mazou-Sacko = $275Th. 1717 / 2921 Pasquale Mazzocchi = NaN 1718 / 2921 Pasquale Mazzocchi = $1.65m 1719 / 2921 Kevin Mbabu = $9.90m 1720 / 2921 Kylian Mbappé = NaN 1721 / 2921 Ibrahima Mbaye = $770Th. 1722 / 2921 Amadou Mbengue = $880Th. 1723 / 2921 Bryan Mbeumo = $24.20m 1724 / 2921 Jason Mbock = $220Th. 1725 / 2921 Jordi Mboula = NaN 1726 / 2921 Moustapha Mbow = NaN 1727 / 2921 Nathanael Mbuku = $8.80m 1728 / 2921 James McArthur = $1.32m 1729 / 2921 James Mcatee = $3.30m 1730 / 2921 Kasey McAteer = $330Th. 1731 / 2921 Liam McCarron = $550Th. 1732 / 2921 Alex McCarthy = $3.30m 1733 / 2921 John McGinn = $35.20m 1734 / 2921 Weston McKennie = $27.50m 1735 / 2921 Stuart McKinstry = $220Th. 1736 / 2921 Kenny McLean = $2.75m 1737 / 2921 Dwight McNeil = $19.80m 1738 / 2921 Scott McTominay = NaN 1739 / 2921 Gary Medel = $1.10m 1740 / 2921 Facundo Medina = $12.10m 1741 / 2921 Nathan de Medina = $825Th. 1742 / 2921 Ben Mee = $2.75m 1743 / 2921 Admir Mehmedi = NaN 1744 / 2921 Hannibal Mejbri = NaN 1745 / 2921 Farid El Melali = NaN 1746 / 2921 Filippo Melegoni = $2.20m 1747 / 2921 Óscar Melendo = $3.30m 1748 / 2921 Gonzalo Melero = $4.40m 1749 / 2921 Birger Meling = $7.70m 1750 / 2921 Arthur Melo = NaN 1751 / 2921 Houboulang Mendes = $3.30m 1752 / 2921 Nuno Mendes = NaN 1753 / 2921 Pedro Mendes = $4.40m 1754 / 2921 Thiago Mendes = $9.90m 1755 / 2921 Tomás Mendes = - 1756 / 2921 Brais Méndez = $19.80m 1757 / 2921 Édgar Méndez = $1.32m 1758 / 2921 Arial Mendy = $770Th. 1759 / 2921 Batista Mendy = $3.30m 1760 / 2921 Benjamin Mendy = - 1761 / 2921 Edouard Mendy = $35.20m 1762 / 2921 Ferland Mendy = $44.00m 1763 / 2921 Nampalys Mendy = $4.40m 1764 / 2921 Gideon Mensah = $2.75m 1765 / 2921 Jorge Meré = NaN 1766 / 2921 Alex Meret = $11.00m 1767 / 2921 Fran Mérida = $990Th. 1768 / 2921 Mikel Merino = $55.00m 1769 / 2921 Quentin Merlin = $5.50m 1770 / 2921 Martín Merquelanz = $1.65m 1771 / 2921 Yıldırım Mert Çetin = NaN 1772 / 2921 Dries Mertens = $4.40m 1773 / 2921 Illan Meslier = $22.00m 1774 / 2921 Lionel Messi = NaN 1775 / 2921 Junior Messias = $6.60m 1776 / 2921 Thomas Meunier = $7.15m 1777 / 2921 Mexer = NaN 1778 / 2921 Marco Meyerhöfer = $2.20m 1779 / 2921 Matt Miazga = $2.20m 1780 / 2921 Kingsley Michael = $440Th. 1781 / 2921 Sven Michel = $1.32m 1782 / 2921 Edouard Michut = NaN 1783 / 2921 Miguel = NaN 1784 / 2921 Valentin Mihaila = $6.05m 1785 / 2921 Mikael = NaN 1786 / 2921 Hilmir Mikaelsson = - 1787 / 2921 Georges Mikautadze = NaN 1788 / 2921 William Mikelbrencis = $2.20m 1789 / 2921 Nikola Milenković = $22.00m 1790 / 2921 Arkadiusz Milik = $17.60m 1791 / 2921 Sergej Milinković-Savić = $77.00m 1792 / 2921 Vanja Milinković-Savić = $2.75m 1793 / 2921 Éder Militão = $66.00m 1794 / 2921 Luka Milivojević = $4.40m 1795 / 2921 Luis Milla = $5.50m 1796 / 2921 Pere Milla = $3.30m 1797 / 2921 Enzo Millot = $2.20m 1798 / 2921 James Milner = $2.20m 1799 / 2921 Santi Mina = - 1800 / 2921 Yerry Mina = $22.00m 1801 / 2921 Takumi Minamino = $13.20m 1802 / 2921 Tyrone Mings = $33.00m 1803 / 2921 Óscar Mingueza = $6.60m 1804 / 2921 Rafa Mir = $17.60m 1805 / 2921 Jorge Miramón = $1.98m 1806 / 2921 Aleksei Miranchuk = $11.00m 1807 / 2921 Juan Miranda = $5.50m 1808 / 2921 Fabio Miretti = $5.50m 1809 / 2921 Tyrick Mitchell = $27.50m 1810 / 2921 Stefan Mitrović = $1.98m 1811 / 2921 Maximilian Mittelstädt = $4.95m 1812 / 2921 Henrikh Mkhitaryan = $8.80m 1813 / 2921 Jakub Moder = $13.20m 1814 / 2921 Anthony Modeste = $3.30m 1815 / 2921 Marco Modolo = $440Th. 1816 / 2921 Luka Modrić = $11.00m 1817 / 2921 Terem Moffi = $9.90m 1818 / 2921 Kevin Möhwald = $1.65m 1819 / 2921 Dion Moise Sahi = NaN 1820 / 2921 Johan Mojica = $5.50m 1821 / 2921 Clinton Mola = $1.10m 1822 / 2921 Jorge Molina = $1.65m 1823 / 2921 Nahuel Molina = $22.00m 1824 / 2921 Cristian Molinaro = $275Th. 1825 / 2921 Florent Mollet = $6.60m 1826 / 2921 Jon Moncayola = $13.20m 1827 / 2921 Monchu = NaN 1828 / 2921 Thomas Monconduit = $1.65m 1829 / 2921 Gonzalo Montiel = $15.40m 1830 / 2921 Lorenzo Montipò = $4.95m 1831 / 2921 Ángel Montoro = $1.10m 1832 / 2921 Martín Montoya = $1.65m 1833 / 2921 Wesley Moraes = NaN 1834 / 2921 Álvaro Morata = $27.50m 1835 / 2921 Jan Morávek = $550Th. 1836 / 2921 Jon Morcillo = NaN 1837 / 2921 Jérémy Morel = $330Th. 1838 / 2921 Alberto Moreno = $5.50m 1839 / 2921 Álex Moreno = $19.80m 1840 / 2921 Gerard Moreno = $44.00m 1841 / 2921 Tete Morente = NaN 1842 / 2921 Ilaix Moriba = $9.90m 1843 / 2921 Ilaix Moriba = NaN 1844 / 2921 Manu Morlanes = $5.50m 1845 / 2921 Raúl Moro = $3.08m 1846 / 2921 Loren Morón = $4.40m 1847 / 2921 Loren Morón = NaN 1848 / 2921 Tyler Morton = $3.30m 1849 / 2921 Cristhian Mosquera = $1.10m 1850 / 2921 Lebo Mothiba = $2.20m 1851 / 2921 Lebo Mothiba = NaN 1852 / 2921 Andrei Motoc = $28Th. 1853 / 2921 Baptiste Mouazan = $220Th. 1854 / 2921 Aimen Moueffek = $1.65m 1855 / 2921 Youssoufa Moukoko = $16.50m 1856 / 2921 Harold Moukoudi = $4.40m 1857 / 2921 Jessy Moulin = $275Th. 1858 / 2921 Steve Mounié = $7.70m 1859 / 2921 Mason Mount = $82.50m 1860 / 2921 Lucas Moura = $22.00m 1861 / 2921 Lys Mousset = $6.60m 1862 / 2921 João Moutinho = NaN 1863 / 2921 Samuel Moutoussamy = $3.30m 1864 / 2921 Toni Moya = $1.65m 1865 / 2921 Samuel Mráz = NaN 1866 / 2921 Nordi Mukiele = $22.00m 1867 / 2921 Mert Müldür = $7.70m 1868 / 2921 Florian Müller = $6.05m 1869 / 2921 Thomas Müller = $24.20m 1870 / 2921 Bali Mumba = $440Th. 1871 / 2921 Marshall Munetsi = $5.50m 1872 / 2921 Iker Muniain = NaN 1873 / 2921 Aihen Muñoz = $6.60m 1874 / 2921 Luis Muriel = $22.00m 1875 / 2921 Jeison Murillo = $3.85m 1876 / 2921 Vedat Muriqi = $7.70m 1877 / 2921 Vedat Muriqi = NaN 1878 / 2921 Jacob Murphy = NaN 1879 / 2921 Nicola Murru = $2.20m 1880 / 2921 Yunus Musah = $16.50m 1881 / 2921 Torben Müsel = NaN 1882 / 2921 Jamal Musiala = $71.50m 1883 / 2921 Juan Musso = $19.80m 1884 / 2921 Shkodran Mustafi = $2.20m 1885 / 2921 Junior Mwanga = $220Th. 1886 / 2921 Enock Mwepu = $19.80m 1887 / 2921 Vitaliy Mykolenko = $19.80m 1888 / 2921 Joakim Mæhle = NaN 1889 / 2921 Obite N'Dicka = NaN 1890 / 2921 Kévin N'Doram = $2.20m 1891 / 2921 Eric N'Jo = $440Th. 1892 / 2921 Vital N'Simba = NaN 1893 / 2921 Nacho = NaN 1894 / 2921 Mickael Nade = $2.75m 1895 / 2921 Marvelous Nakamba = $7.70m 1896 / 2921 Nahitan Nández = $14.30m 1897 / 2921 Nani = NaN 1898 / 2921 Paul Nardi = $2.20m 1899 / 2921 Nikolas Nartey = $1.98m 1900 / 2921 Matija Nastasić = $1.65m 1901 / 2921 Roberto Navarro = $3.30m 1902 / 2921 Ximo Navarro = $1.32m 1903 / 2921 Jesús Navas = $3.30m 1904 / 2921 Keylor Navas = NaN 1905 / 2921 Papa Ndiaga Yade = NaN 1906 / 2921 Loum Ndiaye = NaN 1907 / 2921 Wilfred Ndidi = $66.00m 1908 / 2921 Tanguy Ndombele = NaN 1909 / 2921 Tanguy Ndombele = $33.00m 1910 / 2921 Dan Ndoye = NaN 1911 / 2921 Paul Nebel = $1.43m 1912 / 2921 Álvaro Negredo = $1.65m 1913 / 2921 Reiss Nelson = NaN 1914 / 2921 David Nemeth = $2.53m 1915 / 2921 Ilija Nestorovski = $770Th. 1916 / 2921 Neto = NaN 1917 / 2921 Pedro Neto = NaN 1918 / 2921 Luca Netz = NaN 1919 / 2921 Manuel Neuer = $16.50m 1920 / 2921 Florian Neuhaus = NaN 1921 / 2921 Carlos Neva = $4.40m 1922 / 2921 Rúben Neves = NaN 1923 / 2921 Neymar = NaN 1924 / 2921 Yvan Neyou = $3.30m 1925 / 2921 Jeremy Ngakia = $3.85m 1926 / 2921 Jessic Ngankam = $2.20m 1927 / 2921 Opa Nguette = $2.20m 1928 / 2921 Aurélien Nguiamba = $440Th. 1929 / 2921 Sikou Niakaté = $1.98m 1930 / 2921 Moussa Niakhate = $19.80m 1931 / 2921 Ibrahima Niane = $5.50m 1932 / 2921 M'Baye Niang = $4.40m 1933 / 2921 Cheikh Niasse = NaN 1934 / 2921 Florian Niederlechner = $2.42m 1935 / 2921 Håvard Nielsen = $1.10m 1936 / 2921 Saúl Ñíguez = $27.50m 1937 / 2921 Saúl Ñíguez = NaN 1938 / 2921 Dimitris Nikolaou = $4.40m 1939 / 2921 Joakim Nilsson = $3.85m 1940 / 2921 Casimir Ninga = $1.32m 1941 / 2921 Fernando Niño = $3.30m 1942 / 2921 Eddie Nketiah = $17.60m 1943 / 2921 Nicolas Nkoulou = NaN 1944 / 2921 Christopher Nkunku = $88.00m 1945 / 2921 Lukas Nmecha = $19.80m 1946 / 2921 Mark Noble = $1.10m 1947 / 2921 Peru Nolaskoain = NaN 1948 / 2921 Nolito = NaN 1949 / 2921 Arnaud Nordin = $4.40m 1950 / 2921 Håvard Nordtveit = $1.10m 1951 / 2921 Mathias Normann = $11.00m 1952 / 2921 Connor Noß = NaN 1953 / 2921 Hugo Novoa = $3.30m 1954 / 2921 Soma Novothny = NaN 1955 / 2921 Jean-Pierre Nsame = $4.40m 1956 / 2921 Randy Ntekja = NaN 1957 / 2921 Alexander Nübel = $8.80m 1958 / 2921 Kasim Nuhu = NaN 1959 / 2921 Unai Núñez = NaN 1960 / 2921 Hans Nunoo Sarpei = NaN 1961 / 2921 Bram Nuytinck = $3.85m 1962 / 2921 Simeon Nwankwo = NaN 1963 / 2921 Gerzino Nyamsi = $8.25m 1964 / 2921 Allan Nyom = NaN 1965 / 2921 M'Bala Nzola = $2.20m 1966 / 2921 Christian Nørgaard = $15.40m 1967 / 2921 Adam Obert = $990Th. 1968 / 2921 Joel Obi = $550Th. 1969 / 2921 Jan Oblak = $49.50m 1970 / 2921 Lucas Ocampos = $27.50m 1971 / 2921 Bastian Oczipka = $660Th. 1972 / 2921 Brain Oddei = $990Th. 1973 / 2921 Álvaro Odriozola = $13.20m 1974 / 2921 Angelo Ogbonna = $1.32m 1975 / 2921 Florent Ogier = $770Th. 1976 / 2921 Stefano Okaka = NaN 1977 / 2921 David Okereke = $4.95m 1978 / 2921 Masaya Okugawa = $5.50m 1979 / 2921 Lucas Olaza = $2.75m 1980 / 2921 Oier Olazábal = $330Th. 1981 / 2921 Mathias Olesen = $385Th. 1982 / 2921 Michael Olise = $24.20m 1983 / 2921 Christian Oliva = NaN 1984 / 2921 Brian Oliván = $2.75m 1985 / 2921 Sérgio Oliveira = $13.20m 1986 / 2921 Mathías Olivera = $16.50m 1987 / 2921 Dani Olmo = $44.00m 1988 / 2921 Robin Olsen = $2.20m 1989 / 2921 Warmed Omari = $8.80m 1990 / 2921 Jonas Omlin = $8.80m 1991 / 2921 Andrew Omobamidele = $1.32m 1992 / 2921 Amadou Onana = $11.00m 1993 / 2921 Jean Onana = $5.50m 1994 / 2921 Karim Onisiwo = $3.85m 1995 / 2921 Javier Ontiveros = NaN 1996 / 2921 Tyler Onyango = $220Th. 1997 / 2921 Frank Onyeka = $9.90m 1998 / 2921 Willi Orban = $11.00m 1999 / 2921 Divock Origi = $13.20m 2000 / 2921 Riccardo Orsolini = $11.00m 2001 / 2921 Stefan Ortega = $6.60m 2002 / 2921 Pedro Ortiz = $165Th. 2003 / 2921 Victor Osimhen = $71.50m 2004 / 2921 Milutin Osmajić = NaN 2005 / 2921 David Ospina = $5.50m 2006 / 2921 Patrick Osterhage = $990Th. 2007 / 2921 Tomáš Ostrák = $825Th. 2008 / 2921 Otávio = NaN 2009 / 2921 Paulo Otávio = $6.60m 2010 / 2921 Dango Ouattara = $990Th. 2011 / 2921 Remi Oudin = $5.50m 2012 / 2921 Alexandre Oukidja = $1.32m 2013 / 2921 Azzedine Ounahi = $3.30m 2014 / 2921 Adam Ounas = $7.70m 2015 / 2921 Jesús Owono = $220Th. 2016 / 2921 Reece Oxford = $13.20m 2017 / 2921 Alex Oxlade-Chamberlain = $17.60m 2018 / 2921 Mikel Oyarzabal = $66.00m 2019 / 2921 Ambroise Oyongo = $1.98m 2020 / 2921 Salih Özcan = $14.30m 2021 / 2921 Levin Öztunalı = $1.65m 2022 / 2921 Fernando Pacheco = $5.50m 2023 / 2921 Jon Pacheco = $1.10m 2024 / 2921 Gonçalo Paciência = NaN 2025 / 2921 Daniele Padelli = $440Th. 2026 / 2921 Gavi Paez = NaN 2027 / 2921 Simone Pafundi = - 2028 / 2921 Vincent Pajot = $1.10m 2029 / 2921 Exequiel Palacios = $16.50m 2030 / 2921 Helibelton Palacios = $1.32m 2031 / 2921 Isaac Palazón Camacho = NaN 2032 / 2921 Nicolas Pallois = $1.65m 2033 / 2921 Cole Palmer = $6.60m 2034 / 2921 Erik Palmer-Brown = $3.30m 2035 / 2921 Emerson Palmieri = NaN 2036 / 2921 Emerson Palmieri = NaN 2037 / 2921 Martin Palumbo = $770Th. 2038 / 2921 Goran Pandev = NaN 2039 / 2921 Ivor Pandur = $1.10m 2040 / 2921 Miloš Pantović = $2.42m 2041 / 2921 Antonios Papadopoulos = $385Th. 2042 / 2921 Matondo-Merveille Papela = $440Th. 2043 / 2921 Lucas Paquetá = $38.50m 2044 / 2921 Rubén Pardo = NaN 2045 / 2921 Kevin Paredes = $5.50m 2046 / 2921 Leandro Paredes = NaN 2047 / 2921 Daniel Parejo = $9.90m 2048 / 2921 Fabiano Parisi = $4.95m 2049 / 2921 Raúl Parra = $165Th. 2050 / 2921 Thomas Partey = $41.80m 2051 / 2921 Mario Pašalić = $30.80m 2052 / 2921 Felix Passlack = $1.65m 2053 / 2921 Javier Pastore = $990Th. 2054 / 2921 Patric = NaN 2055 / 2921 Rui Patrício = $6.60m 2056 / 2921 Paulinho = NaN 2057 / 2921 Gabriel Paulista = $7.70m 2058 / 2921 Benjamin Pavard = $33.00m 2059 / 2921 Strahinja Pavlović = NaN 2060 / 2921 Leonardo Pavoletti = $1.76m 2061 / 2921 Dimitri Payet = $5.50m 2062 / 2921 Mads Pedersen = $2.20m 2063 / 2921 Alfonso Pedraza = $19.80m 2064 / 2921 Pedri = NaN 2065 / 2921 Pedro = NaN 2066 / 2921 João Pedro = $15.40m 2067 / 2921 João Pedro = $13.20m 2068 / 2921 Pedrosa = NaN 2069 / 2921 Gianluca Pegolo = $110Th. 2070 / 2921 Peter Pekarík = $770Th. 2071 / 2921 Pietro Pellegri = $4.95m 2072 / 2921 Pietro Pellegri = NaN 2073 / 2921 Lorenzo Pellegrini = $49.50m 2074 / 2921 Luca Pellegrini = $9.90m 2075 / 2921 Facundo Pellistri = $2.75m 2076 / 2921 Federico Peluso = $330Th. 2077 / 2921 Timothee Pembele = $6.60m 2078 / 2921 Rubén Peña = $2.75m 2079 / 2921 Philipp Pentke = $330Th. 2080 / 2921 Nicolas Pépé = $27.50m 2081 / 2921 Ricardo Pepi = $9.90m 2082 / 2921 Alberto Perea = $1.10m 2083 / 2921 Victor Perea = NaN 2084 / 2921 Mathias Pereira Lage = $2.75m 2085 / 2921 Brayann Pereira = $660Th. 2086 / 2921 Danilo Pereira = NaN 2087 / 2921 Ricardo Pereira = $22.00m 2088 / 2921 Gastón Pereiro = $3.30m 2089 / 2921 Luan Peres Petroni = NaN 2090 / 2921 Dor Peretz = $1.54m 2091 / 2921 Roberto Pereyra = $7.15m 2092 / 2921 Ayoze Pérez = $11.00m 2093 / 2921 Carles Pérez = $6.60m 2094 / 2921 Iñigo Pérez = $660Th. 2095 / 2921 Juan Pérez = $660Th. 2096 / 2921 Kike Pérez = $1.65m 2097 / 2921 Lucas Pérez = NaN 2098 / 2921 Lucas Pérez = $2.75m 2099 / 2921 Nehuén Pérez = $6.60m 2100 / 2921 Mattia Perin = $4.40m 2101 / 2921 Ivan Perišić = $11.00m 2102 / 2921 Sonny Perkins = $1.32m 2103 / 2921 Diego Perotti = $550Th. 2104 / 2921 Romain Perraud = $8.80m 2105 / 2921 Lucas Perrin = $5.50m 2106 / 2921 Mario Perrone = - 2107 / 2921 Pavao Pervan = $660Th. 2108 / 2921 Matteo Pessina = $17.60m 2109 / 2921 Andrea Petagna = $13.20m 2110 / 2921 Nils Petersen = $1.65m 2111 / 2921 Danijel Petković = $1.10m 2112 / 2921 Léo Pétrot = $1.10m 2113 / 2921 Njegoš Petrović = $2.75m 2114 / 2921 Jens Petter Hauge = NaN 2115 / 2921 Alex Petxa = NaN 2116 / 2921 Germán Pezzella = $5.50m 2117 / 2921 Giuseppe Pezzella = $5.50m 2118 / 2921 Immanuel Pherai = $770Th. 2119 / 2921 Maximilian Philipp = $4.95m 2120 / 2921 Romain Philippoteaux = NaN 2121 / 2921 Kalvin Phillips = $55.00m 2122 / 2921 Jaden Philogene Bidace = NaN 2123 / 2921 Jérôme Phojo = $330Th. 2124 / 2921 Krzysztof Piątek = NaN 2125 / 2921 Krzysztof Piątek = $13.20m 2126 / 2921 Pablo Piatti = $1.10m 2127 / 2921 Cristiano Piccini = NaN 2128 / 2921 Roberto Piccoli = $4.40m 2129 / 2921 Roberto Piccoli = NaN 2130 / 2921 Jordan Pickford = $22.00m 2131 / 2921 Jérémy Pied = $880Th. 2132 / 2921 Amos Pieper = $5.50m 2133 / 2921 Ronaël Pierre-Gabriel = $5.50m 2134 / 2921 Erik Pieters = $990Th. 2135 / 2921 Tomás Pina Isla = NaN 2136 / 2921 Andrea Pinamonti = $22.00m 2137 / 2921 Orbelín Pineda = $4.40m 2138 / 2921 Ethan Pinnock = $13.20m 2139 / 2921 Yeremi Pino = $44.00m 2140 / 2921 Carlo Pinsoglio = $440Th. 2141 / 2921 Riccardo Pinzi = - 2142 / 2921 Gerard Piqué = $5.50m 2143 / 2921 Marko Pjaca = $3.85m 2144 / 2921 Marvin Plattenhardt = $2.20m 2145 / 2921 Alassane Pléa = NaN 2146 / 2921 Tommaso Pobega = $17.60m 2147 / 2921 Daniel Podence = NaN 2148 / 2921 Suf Podgoreanu = $550Th. 2149 / 2921 Paul Pogba = NaN 2150 / 2921 Joel Pohjanpalo = NaN 2151 / 2921 Matteo Politano = $22.00m 2152 / 2921 Julian Pollersbeck = $880Th. 2153 / 2921 Sebastian Polter = $2.42m 2154 / 2921 Ezequiel Ponce = $5.50m 2155 / 2921 Marin Pongračić = $6.60m 2156 / 2921 Pere Pons = $2.75m 2157 / 2921 Nick Pope = $16.50m 2158 / 2921 Manolo Portanova = $2.75m 2159 / 2921 Portu = NaN 2160 / 2921 Stefan Posch = $11.00m 2161 / 2921 Sergio Postigo = $770Th. 2162 / 2921 Yussuf Poulsen = $15.40m 2163 / 2921 Gaëtan Poussin = $1.10m 2164 / 2921 Darío Poveda = NaN 2165 / 2921 José Pozo = NaN 2166 / 2921 Dennis Praet = $14.30m 2167 / 2921 Mateusz Praszelik = $1.54m 2168 / 2921 Abdón Prats = $1.65m 2169 / 2921 Sanjin Prcić = $4.40m 2170 / 2921 Nicolas de Préville = $2.75m 2171 / 2921 Isaac Price = - 2172 / 2921 Manuel Prietl = $1.98m 2173 / 2921 Alejandro Primo = - 2174 / 2921 Grischa Prömel = $8.25m 2175 / 2921 Nick Proschwitz = $165Th. 2176 / 2921 Ivan Provedel = $3.85m 2177 / 2921 Javi Puado = $8.80m 2178 / 2921 Pubill = - 2179 / 2921 Antonio Puertas = $4.95m 2180 / 2921 Riqui Puig = $7.70m 2181 / 2921 Teemu Pukki = $4.40m 2182 / 2921 Erick Pulgar = NaN 2183 / 2921 Christian Pulisic = $46.20m 2184 / 2921 Afimico Pululu = $1.10m 2185 / 2921 Ignacio Pussetto = $3.30m 2186 / 2921 Niklas Pyyhtiä = $165Th. 2187 / 2921 Przemysław Płacheta = $1.98m 2188 / 2921 Yacine Qasmi = NaN 2189 / 2921 Fabio Quagliarella = $1.10m 2190 / 2921 Quini = NaN 2191 / 2921 Dani Raba = NaN 2192 / 2921 Dani Raba = $990Th. 2193 / 2921 Adrien Rabiot = $18.70m 2194 / 2921 Uroš Račić = $7.70m 2195 / 2921 Nemanja Radoja = $2.20m 2196 / 2921 Nemanja Radonjić = NaN 2197 / 2921 Ivan Radovanović = $660Th. 2198 / 2921 Ionuț Radu = $3.85m 2199 / 2921 Ștefan Radu = $660Th. 2200 / 2921 Boris Radunović = $440Th. 2201 / 2921 Sidney Raebiger = $825Th. 2202 / 2921 Rafinha = NaN 2203 / 2921 Rafinha = NaN 2204 / 2921 Antonio Raillo = $2.20m 2205 / 2921 Antonio Raimondo = - 2206 / 2921 Predrag Rajković = $9.90m 2207 / 2921 Jesuran Rak Sakyi = NaN 2208 / 2921 Ivan Rakitić = $7.70m 2209 / 2921 Diant Ramaj = NaN 2210 / 2921 Jonás Ramalho = $880Th. 2211 / 2921 Adil Rami = $440Th. 2212 / 2921 Sandro Ramírez = $3.85m 2213 / 2921 Guilherme Ramos = $2.20m 2214 / 2921 Sergio Ramos = NaN 2215 / 2921 Aaron Ramsdale = $30.80m 2216 / 2921 Aaron Ramsey = $3.30m 2217 / 2921 Jacob Ramsey = $27.50m 2218 / 2921 Luca Ranieri = $2.75m 2219 / 2921 Andrea Ranocchia = $880Th. 2220 / 2921 Tobias Raschl = $1.10m 2221 / 2921 Elba Rashani = $2.75m 2222 / 2921 Marcus Rashford = NaN 2223 / 2921 Milot Rashica = $7.70m 2224 / 2921 Giacomo Raspadori = $30.80m 2225 / 2921 Raúl = NaN 2226 / 2921 David Raum = $22.00m 2227 / 2921 Nicola Ravaglia = $220Th. 2228 / 2921 David Raya = $24.20m 2229 / 2921 Ante Rebić = $18.70m 2230 / 2921 Arkadiusz Reca = $3.30m 2231 / 2921 Lluís Recasens = $275Th. 2232 / 2921 Nathan Redmond = $19.80m 2233 / 2921 Sergio Reguilón = $27.50m 2234 / 2921 Manolo Reina = $220Th. 2235 / 2921 Pepe Reina = $770Th. 2236 / 2921 Jeff Reine-Adélaïde = $15.40m 2237 / 2921 Reinier = NaN 2238 / 2921 Karim Rekik = $5.50m 2239 / 2921 Álex Remiro = $24.20m 2240 / 2921 Panagiotis Retsos = NaN 2241 / 2921 Panagiotis Retsos = $3.08m 2242 / 2921 Marco Reus = $12.10m 2243 / 2921 Elvis Rexhbeçaj = $4.40m 2244 / 2921 Gio Reyna = $38.50m 2245 / 2921 Bryan Reynolds = NaN 2246 / 2921 Nico Ribaudo = NaN 2247 / 2921 Tiago Ribeiro = $275Th. 2248 / 2921 Franck Ribéry = $1.10m 2249 / 2921 Samuele Ricci = $13.20m 2250 / 2921 Samuele Ricci = NaN 2251 / 2921 Declan Rice = $88.00m 2252 / 2921 Chris Richards = $8.25m 2253 / 2921 Chris Richards = NaN 2254 / 2921 Omar Richards = $7.70m 2255 / 2921 Taylor Richards = $440Th. 2256 / 2921 Richarlison = NaN 2257 / 2921 Marco Richter = $6.60m 2258 / 2921 Diego Rico = $3.30m 2259 / 2921 Sergio Rico = $4.40m 2260 / 2921 Sergio Rico = NaN 2261 / 2921 Jaïro Riedewald = $5.50m 2262 / 2921 Manuel Riemann = $1.32m 2263 / 2921 Tomás Rincón = NaN 2264 / 2921 Tomás Rincón = $1.10m 2265 / 2921 Luis Rioja = $3.30m 2266 / 2921 Renaud Ripart = $4.40m 2267 / 2921 Mihailo Ristić = $3.85m 2268 / 2921 Matt Ritchie = NaN 2269 / 2921 Maxence Rivera = $660Th. 2270 / 2921 Rober = NaN 2271 / 2921 Sergi Roberto = $6.60m 2272 / 2921 Connor Roberts = $2.75m 2273 / 2921 Patrick Roberts = NaN 2274 / 2921 Tyler Roberts = $8.80m 2275 / 2921 Andrew Robertson = $71.50m 2276 / 2921 Marc Roca = $7.70m 2277 / 2921 Rubén Rochina = $2.75m 2278 / 2921 Cimo Röcker = $110Th. 2279 / 2921 Enzo Roco = $2.20m 2280 / 2921 Stian Rode Gregersen = NaN 2281 / 2921 Sebastian Rode = NaN 2282 / 2921 Joe Rodon = $8.80m 2283 / 2921 Rodri = NaN 2284 / 2921 Rodrigo = NaN 2285 / 2921 Rodrigo = NaN 2286 / 2921 Gerson Rodrigues = NaN 2287 / 2921 Kévin Rodrigues = $1.98m 2288 / 2921 Óscar Rodríguez Arnaiz = NaN 2289 / 2921 Óscar Rodríguez Arnaiz = NaN 2290 / 2921 Ángel Rodríguez = $2.20m 2291 / 2921 Dani Rodríguez = $1.32m 2292 / 2921 Guido Rodríguez = $27.50m 2293 / 2921 Jay Rodriguez = $2.20m 2294 / 2921 Ricardo Rodríguez = $3.74m 2295 / 2921 Rodrygo = NaN 2296 / 2921 Mads Roerslev = $2.75m 2297 / 2921 Marko Rog = $6.60m 2298 / 2921 Rogério = NaN 2299 / 2921 Alessio Romagnoli = $18.70m 2300 / 2921 Simone Romagnoli = $1.10m 2301 / 2921 Leonardo Román = $330Th. 2302 / 2921 Cristian Romero = $52.80m 2303 / 2921 Iván Romero = $880Th. 2304 / 2921 Luka Romero = $30.80m 2305 / 2921 Sergio Romero = $770Th. 2306 / 2921 Oriol Romeu = $5.50m 2307 / 2921 Cristiano Ronaldo = NaN 2308 / 2921 Cristiano Ronaldo = NaN 2309 / 2921 Salomón Rondón = $2.75m 2310 / 2921 Valentin Rongier = $13.20m 2311 / 2921 Marten de Roon = $18.70m 2312 / 2921 Unai Ropero = - 2313 / 2921 Pablo Rosario = $11.00m 2314 / 2921 Romario Rösch = $220Th. 2315 / 2921 Danny Rose = $2.42m 2316 / 2921 Francesco Rossi = $110Th. 2317 / 2921 Tom Rothe = $1.32m 2318 / 2921 Jérôme Roussillon = $4.95m 2319 / 2921 Nicolò Rovella = $11.00m 2320 / 2921 Jon Rowe = $880Th. 2321 / 2921 Amir Rrahmani = $27.50m 2322 / 2921 Ruan = NaN 2323 / 2921 Rubén = NaN 2324 / 2921 John Ruddy = NaN 2325 / 2921 Antonio Rüdiger = $44.00m 2326 / 2921 Sebastian Rudy = $1.65m 2327 / 2921 Daniele Rugani = $3.85m 2328 / 2921 Matteo Ruggeri = $2.20m 2329 / 2921 Mário Rui = $8.80m 2330 / 2921 Aitor Ruibal = $3.30m 2331 / 2921 Fabián Ruiz Peña = NaN 2332 / 2921 Isma Ruiz = $660Th. 2333 / 2921 Víctor Ruiz = $1.65m 2334 / 2921 Gerónimo Rulli = $6.60m 2335 / 2921 Lukas Rupp = $1.32m 2336 / 2921 Alessandro Russo = - 2337 / 2921 Franco Russo = $1.32m 2338 / 2921 Georginio Rutter = $17.60m 2339 / 2921 Mathew Ryan = $5.50m 2340 / 2921 Julian Ryerson = $4.40m 2341 / 2921 Frederik Rønnow = $2.20m 2342 / 2921 José Sá = NaN 2343 / 2921 Roli Pereira de Sa = $770Th. 2344 / 2921 Youssouf Sabaly = $3.30m 2345 / 2921 Mathys Saban = $330Th. 2346 / 2921 Stefano Sabelli = NaN 2347 / 2921 Abdelhamid Sabiri = $3.30m 2348 / 2921 Marcel Sabitzer = $16.50m 2349 / 2921 Marcel Sabitzer = NaN 2350 / 2921 Falaye Sacko = $4.40m 2351 / 2921 Alexis Saelemaekers = $18.70m 2352 / 2921 Rafiki Said Ahamada = NaN 2353 / 2921 Wesley Saïd = $2.75m 2354 / 2921 Allan Saint-Maximin = NaN 2355 / 2921 Romain Saïss = NaN 2356 / 2921 Bukayo Saka = $71.50m 2357 / 2921 Mamadou Sakho = $4.95m 2358 / 2921 Bakary Sako = $440Th. 2359 / 2921 Jacopo Sala = $550Th. 2360 / 2921 Mohamed Salah = $99.00m 2361 / 2921 Eddie Salcedo = $3.85m 2362 / 2921 William Saliba = $33.00m 2363 / 2921 Romain Salin = $440Th. 2364 / 2921 Mohammed Salisu = $19.80m 2365 / 2921 Roland Sallai = $13.20m 2366 / 2921 Yoann Salmier = $2.20m 2367 / 2921 Salvi = NaN 2368 / 2921 Lazar Samardzic = $3.85m 2369 / 2921 Diadie Samassékou = $17.60m 2370 / 2921 Mama Samba Baldé = NaN 2371 / 2921 Albert Sambi Lokonga = NaN 2372 / 2921 Junior Sambia = $4.95m 2373 / 2921 Luigi Samele = $165Th. 2374 / 2921 Fede San Emeterio = $1.65m 2375 / 2921 Antonio Sanabria = $8.25m 2376 / 2921 Oihan Sancet = NaN 2377 / 2921 Renato Sanches = $30.80m 2378 / 2921 Alexis Sánchez = $3.85m 2379 / 2921 Antonio Sánchez = $1.65m 2380 / 2921 Davinson Sánchez = $30.80m 2381 / 2921 Germán Sánchez = $880Th. 2382 / 2921 Juan Sánchez = $1.65m 2383 / 2921 Manuel Sánchez = $11.00m 2384 / 2921 Robert Sánchez = $17.60m 2385 / 2921 Jadon Sancho = NaN 2386 / 2921 Philippe Sandler = NaN 2387 / 2921 Alex Sandro = $6.60m 2388 / 2921 Leroy Sané = $66.00m 2389 / 2921 Oier Sanjurjo = $550Th. 2390 / 2921 Mohamed Sankoh = $1.10m 2391 / 2921 Morgan Sanson = $11.00m 2392 / 2921 Nicola Sansone = $2.20m 2393 / 2921 Baptiste Santamaria = $15.40m 2394 / 2921 Baptiste Santamaria = NaN 2395 / 2921 Federico Santander = $660Th. 2396 / 2921 Jesús Santiago = NaN 2397 / 2921 Samir Santos = NaN 2398 / 2921 Samir Santos = NaN 2399 / 2921 Sergio Santos = $220Th. 2400 / 2921 Alvaro Sanz = $770Th. 2401 / 2921 Riccardo Saponara = $2.75m 2402 / 2921 Pablo Sarabia = NaN 2403 / 2921 Marcelo Saracchi = $2.75m 2404 / 2921 Josh Sargent = $7.70m 2405 / 2921 Jeremy Sarmiento = $3.30m 2406 / 2921 Bouna Sarr = $2.75m 2407 / 2921 Ismaila Sarr = $29.70m 2408 / 2921 Malang Sarr = $8.80m 2409 / 2921 Joan Sastre Vanrell = NaN 2410 / 2921 Giacomo Satalino = $220Th. 2411 / 2921 Martin Satriano = $7.70m 2412 / 2921 Martin Satriano = NaN 2413 / 2921 Téji Savanier = $13.20m 2414 / 2921 Esteban Saveljich = $880Th. 2415 / 2921 Stefan Savić = $17.60m 2416 / 2921 Joe Scally = NaN 2417 / 2921 Giorgio Scalvini = $11.00m 2418 / 2921 Gianluca Scamacca = $33.00m 2419 / 2921 Dane Scarlett = $275Th. 2420 / 2921 Kevin Schade = $7.70m 2421 / 2921 András Schäfer = $2.20m 2422 / 2921 Fabian Schär = NaN 2423 / 2921 Louis Schaub = $1.98m 2424 / 2921 Andrea Schiavone = $440Th. 2425 / 2921 Patrik Schick = $55.00m 2426 / 2921 Kingsley Schindler = $880Th. 2427 / 2921 Xaver Schlager = $29.70m 2428 / 2921 Keven Schlotterbeck = $3.30m 2429 / 2921 Nico Schlotterbeck = $36.30m 2430 / 2921 Jeffrey Schlupp = $8.80m 2431 / 2921 Kasper Schmeichel = $4.40m 2432 / 2921 Jonathan Schmid = $1.32m 2433 / 2921 Benno Schmitz = $3.30m 2434 / 2921 David Schnegg = NaN 2435 / 2921 Morgan Schneiderlin = $3.85m 2436 / 2921 Alessandro Schöpf = $2.75m 2437 / 2921 Jerdy Schouten = $9.90m 2438 / 2921 Nico Schulz = $4.40m 2439 / 2921 Marvin Schwäbe = $4.40m 2440 / 2921 Alexander Schwolow = $3.30m 2441 / 2921 Valentino Scotta = NaN 2442 / 2921 Demba Seck = $3.30m 2443 / 2921 Aleksandar Sedlar = $550Th. 2444 / 2921 Paul Seguin = $2.42m 2445 / 2921 Alidu Seidu = $2.20m 2446 / 2921 Davie Selke = $1.98m 2447 / 2921 Matz Sels = $8.80m 2448 / 2921 Ken Sema = $2.75m 2449 / 2921 Nélson Semedo = NaN 2450 / 2921 Lion Semić = $550Th. 2451 / 2921 Adrian Šemper = $1.65m 2452 / 2921 Stefano Sensi = $7.70m 2453 / 2921 Stefano Sensi = NaN 2454 / 2921 Luigi Sepe = $1.54m 2455 / 2921 Suat Serdar = $8.80m 2456 / 2921 Laurens Serpe = NaN 2457 / 2921 Janni Serra = $1.98m 2458 / 2921 Javier Serrano = NaN 2459 / 2921 Nicolás Serrano = NaN 2460 / 2921 Zidan Sertdemir = $2.20m 2461 / 2921 Ryan Sessegnon = $19.80m 2462 / 2921 Nils Seufert = NaN 2463 / 2921 Salva Sevilla = $330Th. 2464 / 2921 Stephan El Shaarawy = $6.60m 2465 / 2921 Jamie Shackleton = $2.75m 2466 / 2921 Xherdan Shaqiri = NaN 2467 / 2921 Luke Shaw = NaN 2468 / 2921 Jonjo Shelvey = NaN 2469 / 2921 Aimar Sher = $1.10m 2470 / 2921 Eldor Shomurodov = $8.80m 2471 / 2921 Shola Shoretire = NaN 2472 / 2921 Mahame Siby = NaN 2473 / 2921 Aboubakar Sidibé = NaN 2474 / 2921 Alassane Sidibe = $440Th. 2475 / 2921 Djibril Sidibé = $8.80m 2476 / 2921 Kaj Sierhuis = NaN 2477 / 2921 Francisco Sierralta = $1.65m 2478 / 2921 Arnór Sigurðsson = $2.53m 2479 / 2921 Kiliann Sildillia = $1.65m 2480 / 2921 Adrien Silva = NaN 2481 / 2921 André Silva = $35.20m 2482 / 2921 Bernardo Silva = $88.00m 2483 / 2921 Caio Henrique Oliveira Silva = NaN 2484 / 2921 David Silva = $4.40m 2485 / 2921 Fábio Silva = NaN 2486 / 2921 Gabriel Silva = $1.32m 2487 / 2921 Jonathan Silva = $1.98m 2488 / 2921 Rui Silva = $16.50m 2489 / 2921 Thiago Silva = $2.75m 2490 / 2921 Marco Silvestri = $5.50m 2491 / 2921 Mohamed Simakan = $24.20m 2492 / 2921 Giovanni Simeone = $18.70m 2493 / 2921 Giovanni Simeone = NaN 2494 / 2921 Giuliano Simeone = NaN 2495 / 2921 Ellis Simms = $330Th. 2496 / 2921 Moses Simon = $11.00m 2497 / 2921 Unai Simón = NaN 2498 / 2921 Xavi Simons = NaN 2499 / 2921 Wilfried Singo = NaN 2500 / 2921 Daley Sinkgraven = $4.40m 2501 / 2921 Tobias Sippel = NaN 2502 / 2921 Hugo Siquet = $6.05m 2503 / 2921 Salvatore Sirigu = $1.65m 2504 / 2921 Issouf Sissokho = $550Th. 2505 / 2921 Ibrahima Sissoko = $8.80m 2506 / 2921 Moussa Sissoko = $4.95m 2507 / 2921 Nelson Sissoko = NaN 2508 / 2921 Sambou Sissoko = $550Th. 2509 / 2921 Antonio Sivera = $1.10m 2510 / 2921 Ellyes Skhiri = $14.30m 2511 / 2921 Oliver Skipp = $19.80m 2512 / 2921 Leo Skiri Østigård = NaN 2513 / 2921 Łukasz Skorupski = $4.40m 2514 / 2921 Andreas Skov Olsen = NaN 2515 / 2921 Robert Skov = $7.70m 2516 / 2921 Milan Škriniar = $71.50m 2517 / 2921 Islam Slimani = NaN 2518 / 2921 William Smallbone = $2.20m 2519 / 2921 Chris Smalling = $8.80m 2520 / 2921 Emile Smith Rowe = $44.00m 2521 / 2921 Cédric Soares = $6.60m 2522 / 2921 Danilo Soares = $2.42m 2523 / 2921 Rubén Sobrino = NaN 2524 / 2921 Rubén Sobrino = $2.20m 2525 / 2921 Alex Sola = $330Th. 2526 / 2921 Augusto Solari = $2.75m 2527 / 2921 Roberto Soldado = $1.10m 2528 / 2921 Carlos Soler = $55.00m 2529 / 2921 Yann Sommer = NaN 2530 / 2921 Son = NaN 2531 / 2921 Brandon Soppy = $5.50m 2532 / 2921 David Soria = $8.80m 2533 / 2921 Roberto Soriano = $5.50m 2534 / 2921 Alberto Soro = $2.75m 2535 / 2921 Borna Sosa = $25.30m 2536 / 2921 Hugo Sotelo = - 2537 / 2921 Florian Sotoca = $2.75m 2538 / 2921 Riccardo Sottil = $9.90m 2539 / 2921 Tomáš Souček = $49.50m 2540 / 2921 Matìas Soulé = $2.75m 2541 / 2921 Sambou Soumano = $1.32m 2542 / 2921 Adama Soumaoro = $4.40m 2543 / 2921 Boubakary Soumaré = $27.50m 2544 / 2921 Arnaud Souquet = $2.75m 2545 / 2921 Djibril Sow = NaN 2546 / 2921 Saidou Sow = $4.40m 2547 / 2921 Çağlar Söyüncü = $44.00m 2548 / 2921 Leonardo Spinazzola = $22.00m 2549 / 2921 Marco Sportiello = $1.65m 2550 / 2921 Tony Springett = - 2551 / 2921 Jerry St. Juste = $17.60m 2552 / 2921 Anton Stach = $14.30m 2553 / 2921 Kostas Stafylidis = $1.98m 2554 / 2921 Luca Stanga = $165Th. 2555 / 2921 Josip Stanišić = $4.40m 2556 / 2921 Niklas Stark = $7.15m 2557 / 2921 Jason Steele = $660Th. 2558 / 2921 Jed Steer = $660Th. 2559 / 2921 Renato Steffen = $2.20m 2560 / 2921 Zack Steffen = $6.60m 2561 / 2921 Calvin Stengs = $14.30m 2562 / 2921 Pascal Stenzel = $1.65m 2563 / 2921 Dale Stephens = $1.10m 2564 / 2921 Jack Stephens = $7.70m 2565 / 2921 Raheem Sterling = $77.00m 2566 / 2921 Finley Stevens = $440Th. 2567 / 2921 Angelo Stiller = $7.70m 2568 / 2921 Lars Stindl = NaN 2569 / 2921 Riccardo Stivanello = - 2570 / 2921 Kevin Stöger = $1.76m 2571 / 2921 Petar Stojanović = $3.30m 2572 / 2921 John Stones = $30.80m 2573 / 2921 Thomas Strakosha = $7.70m 2574 / 2921 Stefan Strandberg = $550Th. 2575 / 2921 Dávid Strelec = $1.54m 2576 / 2921 Tobias Strobl = $990Th. 2577 / 2921 Kevin Strootman = $1.65m 2578 / 2921 Pascal Struijk = $16.50m 2579 / 2921 Jens Stryger Larsen = $2.20m 2580 / 2921 Leo Štulac = $2.42m 2581 / 2921 Stefano Sturaro = $3.30m 2582 / 2921 Damián Suárez = $1.65m 2583 / 2921 Denis Suárez = $11.00m 2584 / 2921 Luis Suárez = $8.80m 2585 / 2921 Mario Suárez = $330Th. 2586 / 2921 Isaac Success = $3.30m 2587 / 2921 Niklas Süle = $38.50m 2588 / 2921 Kamaldeen Sulemana = $19.80m 2589 / 2921 Crysencio Summerville = $2.20m 2590 / 2921 Vladyslav Supriaha = NaN 2591 / 2921 Suso = NaN 2592 / 2921 Bosko Sutalo = $3.30m 2593 / 2921 Mattias Svanberg = $16.50m 2594 / 2921 Michael Svoboda = $990Th. 2595 / 2921 Abdoulaye Sylla = $275Th. 2596 / 2921 Mamadou Sylla = NaN 2597 / 2921 Mamadou Sylla = $1.32m 2598 / 2921 Ádám Szalai = NaN 2599 / 2921 Wojciech Szczęsny = $16.50m 2600 / 2921 Dominik Szoboszlai = $30.80m 2601 / 2921 Jakob Sørensen = NaN 2602 / 2921 Alexander Sørloth = $11.00m 2603 / 2921 Tachi = NaN 2604 / 2921 Jonathan Tah = $27.50m 2605 / 2921 Waniss Taibi = $660Th. 2606 / 2921 Flavien Tait = $8.80m 2607 / 2921 Adrien Tameze = $11.00m 2608 / 2921 Japhet Tanganga = $13.20m 2609 / 2921 Renato Tapia = $11.00m 2610 / 2921 Edmond Tapsoba = $38.50m 2611 / 2921 Florian Tardieu = $3.30m 2612 / 2921 Matt Targett = $18.70m 2613 / 2921 Matt Targett = NaN 2614 / 2921 Oussama Targhalline = $220Th. 2615 / 2921 James Tarkowski = $24.20m 2616 / 2921 Ciprian Tătărușanu = $660Th. 2617 / 2921 Niklas Tauer = $1.65m 2618 / 2921 Nuno Tavares = $16.50m 2619 / 2921 Charlie Taylor = $3.30m 2620 / 2921 Loum Tchaouna = $2.20m 2621 / 2921 Warren Tchimbembé = NaN 2622 / 2921 Aurélien Tchouaméni = $66.00m 2623 / 2921 Mathys Tel = $2.20m 2624 / 2921 Jordan Tell = NaN 2625 / 2921 Nathan Tella = $1.98m 2626 / 2921 Alex Telles = NaN 2627 / 2921 Cristian Tello = $5.50m 2628 / 2921 Nahuel Tenaglia = $3.30m 2629 / 2921 Marc Tenas = $550Th. 2630 / 2921 Marc-André ter Stegen = $33.00m 2631 / 2921 Filippo Terracciano = - 2632 / 2921 Pietro Terracciano = $1.65m 2633 / 2921 Martin Terrier = $27.50m 2634 / 2921 Aleksa Terzić = $1.65m 2635 / 2921 Robert Tesche = $385Th. 2636 / 2921 Tanner Tessmann = $2.75m 2637 / 2921 Tetê = NaN 2638 / 2921 Cedric Teuchert = NaN 2639 / 2921 Arthur Theate = $16.50m 2640 / 2921 Jan Thielmann = $8.25m 2641 / 2921 Sada Thioub = NaN 2642 / 2921 Sada Thioub = $2.20m 2643 / 2921 Luke Thomas = $13.20m 2644 / 2921 Romain Thomas = $1.10m 2645 / 2921 Adrien Thomasson = $9.90m 2646 / 2921 Erik Thommy = $1.98m 2647 / 2921 Dominic Thompson = $880Th. 2648 / 2921 Morten Thorsby = $7.70m 2649 / 2921 Thuler = NaN 2650 / 2921 Marcus Thuram = NaN 2651 / 2921 Khéphren Thuram-Ulie = NaN 2652 / 2921 Alexis Tibidi = $1.32m 2653 / 2921 Cheikh Tidiane Sabaly = NaN 2654 / 2921 Youri Tielemans = $60.50m 2655 / 2921 Kieran Tierney = $35.20m 2656 / 2921 Steffen Tigges = $1.65m 2657 / 2921 Malik Tillman = $1.65m 2658 / 2921 Timothy Tillman = $1.98m 2659 / 2921 David Timor = NaN 2660 / 2921 Jean-Clair Todibo = $22.00m 2661 / 2921 Umut Tohumcu = - 2662 / 2921 Karl Toko Ekambi = $16.50m 2663 / 2921 Corentin Tolisso = $16.50m 2664 / 2921 Jeremy Toljan = $5.50m 2665 / 2921 Rafael Tolói = $8.80m 2666 / 2921 Raúl de Tomás = $27.50m 2667 / 2921 Tiago Tomás = $7.70m 2668 / 2921 Takehiro Tomiyasu = $27.50m 2669 / 2921 Takehiro Tomiyasu = NaN 2670 / 2921 James Tomkins = $1.65m 2671 / 2921 Fikayo Tomori = $55.00m 2672 / 2921 Sandro Tonali = $55.00m 2673 / 2921 Lorenzo Tonelli = $1.10m 2674 / 2921 Ivan Toney = $38.50m 2675 / 2921 Ernesto Torregrossa = NaN 2676 / 2921 Lucas Torreira = $22.00m 2677 / 2921 Raúl Torrente = $3.30m 2678 / 2921 Ferrán Torres = NaN 2679 / 2921 Ferrán Torres = $49.50m 2680 / 2921 Óliver Torres = $8.80m 2681 / 2921 Pau Torres = $55.00m 2682 / 2921 Roberto Torres = $3.30m 2683 / 2921 Lucas Torró = $5.50m 2684 / 2921 Jordan Torunarigha = NaN 2685 / 2921 Cenk Tosun = $2.20m 2686 / 2921 Abdoulaye Touré = NaN 2687 / 2921 Almamy Touré = NaN 2688 / 2921 Lucas Tousart = $9.90m 2689 / 2921 Yoann Touzghar = $660Th. 2690 / 2921 Andros Townsend = $5.50m 2691 / 2921 Adama Traoré = NaN 2692 / 2921 Adama Traoré = $22.00m 2693 / 2921 Amadou Traore = $440Th. 2694 / 2921 Bertrand Traoré = $17.60m 2695 / 2921 Boubacar Traoré = $1.98m 2696 / 2921 Charles Traore = $1.65m 2697 / 2921 Hamari Traoré = $11.00m 2698 / 2921 Ismaël Traoré = $660Th. 2699 / 2921 Kevin Trapp = NaN 2700 / 2921 Miguel Trauco = $1.98m 2701 / 2921 Óscar Trejo = $3.30m 2702 / 2921 Trézéguet = NaN 2703 / 2921 Manu Trigueros = $15.40m 2704 / 2921 Simone Trimboli = $660Th. 2705 / 2921 Christopher Trimmel = $990Th. 2706 / 2921 Francisco Trincão = NaN 2707 / 2921 Kieran Trippier = NaN 2708 / 2921 Kieran Trippier = NaN 2709 / 2921 William Troost-Ekong = $4.40m 2710 / 2921 Leandro Trossard = $22.00m 2711 / 2921 Adrien Truffert = $13.20m 2712 / 2921 Philipp Tschauner = $330Th. 2713 / 2921 Kostas Tsimikas = $16.50m 2714 / 2921 Axel Tuanzebe = NaN 2715 / 2921 Axel Tuanzebe = $7.70m 2716 / 2921 Ozan Tufan = NaN 2717 / 2921 Beñat Turrientes = $3.30m 2718 / 2921 Tuta = NaN 2719 / 2921 Christos Tzolis = $8.80m 2720 / 2921 Iyenoma Udogie = NaN 2721 / 2921 Matthieu Udol = $2.75m 2722 / 2921 Ike Ugbo = $5.50m 2723 / 2921 Chimuanya Ugochukwu = NaN 2724 / 2921 Hwang Ui-jo = NaN 2725 / 2921 Anthony Ujah = $550Th. 2726 / 2921 Maximilian Ullmann = $2.20m 2727 / 2921 Sven Ulreich = $990Th. 2728 / 2921 Samuel Umtiti = $2.20m 2729 / 2921 Enes Ünal = $27.50m 2730 / 2921 Cengiz Ünder = $24.20m 2731 / 2921 Dayot Upamecano = $44.00m 2732 / 2921 Benjamin Uphoff = $550Th. 2733 / 2921 Kacper Urbanski = $220Th. 2734 / 2921 Jere Uronen = $2.20m 2735 / 2921 Mark Uth = $3.30m 2736 / 2921 Myrto Uzuni = $3.30m 2737 / 2921 Antonio Vacca = $770Th. 2738 / 2921 Álvaro Vadillo = NaN 2739 / 2921 Óscar Valentín = $3.30m 2740 / 2921 Germán Valera = $1.65m 2741 / 2921 Yan Valery = $2.75m 2742 / 2921 Martin Valjent = $4.40m 2743 / 2921 Jesús Vallejo = $3.30m 2744 / 2921 Manu Vallejo = $3.30m 2745 / 2921 Manu Vallejo = NaN 2746 / 2921 Federico Valverde = $77.00m 2747 / 2921 Vanderson = NaN 2748 / 2921 Zinho Vanheusden = $8.80m 2749 / 2921 Jonathan Varane = NaN 2750 / 2921 Raphaël Varane = NaN 2751 / 2921 Jamie Vardy = $5.50m 2752 / 2921 Ruben Vargas = $8.80m 2753 / 2921 Sebastian Vasiliadis = $1.98m 2754 / 2921 Johan Vásquez = $4.40m 2755 / 2921 Denis Vavro = NaN 2756 / 2921 José Luis García Vayá = NaN 2757 / 2921 Jesus Vazquez = $5.50m 2758 / 2921 Kevin Vázquez = $2.20m 2759 / 2921 Lucas Vázquez = $13.20m 2760 / 2921 Matías Vecino = $3.85m 2761 / 2921 Gabriel Veiga = $1.65m 2762 / 2921 Miguel Veloso = $990Th. 2763 / 2921 Joël Veltman = $11.00m 2764 / 2921 Mickey van de Ven = $4.40m 2765 / 2921 Unai Vencedor Paris = NaN 2766 / 2921 Lorenzo Venuti = $3.30m 2767 / 2921 Daniele Verde = $5.50m 2768 / 2921 Simone Verdi = NaN 2769 / 2921 Simone Verdi = $5.50m 2770 / 2921 Gonzalo Verdú = $770Th. 2771 / 2921 Jordan Veretout = $18.70m 2772 / 2921 Edoardo Vergani = $660Th. 2773 / 2921 Vincent Vermeij = $440Th. 2774 / 2921 Marco Verratti = NaN 2775 / 2921 Valerio Verre = NaN 2776 / 2921 Valerio Verre = $2.75m 2777 / 2921 Freddie Veseli = $440Th. 2778 / 2921 Mikel Vesga = NaN 2779 / 2921 Jannik Vestergaard = $14.30m 2780 / 2921 Rúben Vezo = $4.40m 2781 / 2921 Guglielmo Vicario = $11.00m 2782 / 2921 Aleix Vidal = $2.20m 2783 / 2921 Arturo Vidal = $2.20m 2784 / 2921 Nacho Vidal = $5.50m 2785 / 2921 Gabriel Vidovic = $2.20m 2786 / 2921 Ronaldo Vieira = $3.85m 2787 / 2921 Nick Viergever = $880Th. 2788 / 2921 Luca Vignali = NaN 2789 / 2921 Emanuel Vignato = $5.50m 2790 / 2921 Dídac Vilà = $660Th. 2791 / 2921 Tonny Vilhena = $5.50m 2792 / 2921 Daniel Villahermosa = $220Th. 2793 / 2921 Asier Villalibre = NaN 2794 / 2921 Gonzalo Villar = $5.50m 2795 / 2921 Matías Viña = $8.25m 2796 / 2921 Nicolas Viola = $660Th. 2797 / 2921 Mattia Viti = $7.70m 2798 / 2921 Vitolo = NaN 2799 / 2921 Daniel Vivian = NaN 2800 / 2921 Dušan Vlahović = NaN 2801 / 2921 Dušan Vlahović = $93.50m 2802 / 2921 Nikola Vlašić = $24.20m 2803 / 2921 Andreas Voglsammer = $1.32m 2804 / 2921 Kevin Vogt = $3.85m 2805 / 2921 Mërgim Vojvoda = $6.05m 2806 / 2921 Kevin Volland = $24.20m 2807 / 2921 Cristian Volpato = - 2808 / 2921 Aster Vranckx = $11.00m 2809 / 2921 Stefan de Vrij = $30.80m 2810 / 2921 Šime Vrsaljko = $5.50m 2811 / 2921 Nikola Vukčević = $1.10m 2812 / 2921 Matěj Vydra = $2.20m 2813 / 2921 Walace = NaN 2814 / 2921 Theo Walcott = $1.98m 2815 / 2921 Luca Waldschmidt = $7.70m 2816 / 2921 Kyle Walker = $19.80m 2817 / 2921 Kyle Walker-Peters = $24.20m 2818 / 2921 Sebastian Walukiewicz = $5.50m 2819 / 2921 Aaron Wan-Bissaka = NaN 2820 / 2921 Paul Wanner = $2.20m 2821 / 2921 Danny Ward = $6.60m 2822 / 2921 Joel Ward = $2.20m 2823 / 2921 James Ward-Prowse = $35.20m 2824 / 2921 Magnus Warming = $990Th. 2825 / 2921 Daniel Wass = $6.60m 2826 / 2921 Daniel Wass = NaN 2827 / 2921 Ollie Watkins = $38.50m 2828 / 2921 Timothy Weah = $13.20m 2829 / 2921 Adam Webster = $18.70m 2830 / 2921 Wout Weghorst = $15.40m 2831 / 2921 Wout Weghorst = NaN 2832 / 2921 Noah Weißhaupt = $1.87m 2833 / 2921 Danny Welbeck = $4.40m 2834 / 2921 Timo Werner = $38.50m 2835 / 2921 Ashley Westwood = $2.20m 2836 / 2921 Ben White = $44.00m 2837 / 2921 Silvan Widmer = $5.50m 2838 / 2921 Georginio Wijnaldum = NaN 2839 / 2921 Jetro Willems = $1.10m 2840 / 2921 Brandon Williams = NaN 2841 / 2921 Iñaki Williams = NaN 2842 / 2921 Neco Williams = $8.80m 2843 / 2921 Nico Williams = NaN 2844 / 2921 Joe Willock = NaN 2845 / 2921 Callum Wilson = NaN 2846 / 2921 Patrick Wimmer = $8.80m 2847 / 2921 Jonas Wind = $15.40m 2848 / 2921 Marten Winkler = $193Th. 2849 / 2921 Harry Winks = $16.50m 2850 / 2921 Frederik Winther = $1.10m 2851 / 2921 Florian Wirtz = $77.00m 2852 / 2921 Yoane Wissa = $13.20m 2853 / 2921 Axel Witsel = $4.40m 2854 / 2921 Hannes Wolf = NaN 2855 / 2921 Marius Wolf = $7.15m 2856 / 2921 Luca Wollschläger = - 2857 / 2921 Jeong Woo-yeong = NaN 2858 / 2921 Chris Wood = NaN 2859 / 2921 Chris Wood = NaN 2860 / 2921 Freddie Woodman = NaN 2861 / 2921 Christopher Wooh = $3.30m 2862 / 2921 Joscha Wosz = NaN 2863 / 2921 Xeka = NaN 2864 / 2921 Granit Xhaka = $22.00m 2865 / 2921 Sekou Yansané = NaN 2866 / 2921 Andriy Yarmolenko = $2.75m 2867 / 2921 Yusuf Yazıcı = NaN 2868 / 2921 Kelvin Yeboah = $5.50m 2869 / 2921 Gerard Yepes = $275Th. 2870 / 2921 Burak Yılmaz = $1.65m 2871 / 2921 Okay Yokuşlu = $3.30m 2872 / 2921 Okay Yokuşlu = NaN 2873 / 2921 Leny Yoro = $165Th. 2874 / 2921 Maya Yoshida = $1.65m 2875 / 2921 Ashley Young = $1.10m 2876 / 2921 Nathan Young-Coombes = - 2877 / 2921 Zaydou Youssouf = $4.40m 2878 / 2921 Mattia Zaccagni = NaN 2879 / 2921 Mattia Zaccagni = $19.80m 2880 / 2921 Dan-Axel Zagadou = $9.90m 2881 / 2921 Wilfried Zaha = $41.80m 2882 / 2921 Denis Zakaria = NaN 2883 / 2921 Denis Zakaria = $29.70m 2884 / 2921 Joseba Zaldúa = $4.40m 2885 / 2921 Nicola Zalewski = $13.20m 2886 / 2921 Andre-Frank Zambo Anguissa = NaN 2887 / 2921 Nicolò Zaniolo = $36.30m 2888 / 2921 Alessandro Zanoli = $4.40m 2889 / 2921 Mattia Zanotti = - 2890 / 2921 Duván Zapata = $30.80m 2891 / 2921 Gabriele Zappa = $4.18m 2892 / 2921 Davide Zappacosta = $9.90m 2893 / 2921 Oier Zarraga = NaN 2894 / 2921 Simone Zaza = $1.10m 2895 / 2921 Akim Zedadka = $4.40m 2896 / 2921 Deyovaisio Zeefuik = NaN 2897 / 2921 Marvin Zeegelaar = $880Th. 2898 / 2921 Arber Zeneli = $4.95m 2899 / 2921 Robin Zentner = $5.50m 2900 / 2921 Andi Zeqiri = $2.53m 2901 / 2921 Mehdi Zerkane = $1.65m 2902 / 2921 Edon Zhegrova = $5.50m 2903 / 2921 Luca Zidane = $2.20m 2904 / 2921 Piotr Zieliński = $44.00m 2905 / 2921 David Zima = $7.70m 2906 / 2921 Christoph Zimmermann = $1.10m 2907 / 2921 Oleksandr Zinchenko = $27.50m 2908 / 2921 Hakim Ziyech = $30.80m 2909 / 2921 Jeroen Zoet = $935Th. 2910 / 2921 Simon Zoller = $1.21m 2911 / 2921 Nadir Zortea = $1.54m 2912 / 2921 Banhie Zoukrou = NaN 2913 / 2921 Kurt Zouma = $30.80m 2914 / 2921 Petar Zovko = $110Th. 2915 / 2921 Igor Zubeldia = $16.50m 2916 / 2921 Martín Zubimendi = $33.00m 2917 / 2921 Szymon Żurkowski = $7.70m 2918 / 2921 Martin Ødegaard = $49.50m 2919 / 2921 Milan Đurić = NaN 2920 / 2921 Filip Đuričić = NaN
# load df_value from csv
df_values = load_csv(r"C:\Python_Projects\CSV\df_values_20_06_2022.csv")
# Test export function
path = "C:\Python_Projects\CSV"
filename = "df_values_20_06_2022"
export_csv(df_values_backup,path,filename)
# Check Number of NaN Value in value column
df_values["value"].isna().sum()
# remove "Unnamed: 0" from df_values
df_values = df_values.drop("Unnamed: 0", axis=1)
#Create backup datafarame
df_values_backup = df_values.copy()
df_stats_backup = df_stats.copy()
df_passing_backup = df_passing.copy()
df_shooting_backup = df_shooting.copy()
df_creation_backup = df_creation.copy()
df_defense_backup = df_defense.copy()
df_miscellaneous_backup = df_miscellaneous.copy()
#df_values = df_values_backup
#df_stats = df_stats_backup
#df_passing = df_passing_backup
#df_shooting = df_shooting_backup
#df_creation = df_creation_backup
#df_defense = df_defense_backup
#df_miscellaneous = df_miscellaneous_backup
# Check if dataframe columns
df_defense.columns
Index(['player_name', 'nationality', 'position', 'team', 'league', 'age',
'birth_year', 'minutes_played_by_90m', 'total_tackels',
'total_tackels_won', 'total_defensive_tackels', 'total_mid_tackels',
'total_attack_tackels', 'total_dribblers_tackled',
'total_dribbles_contested', 'dribbles_tackeld_by_percentage',
'total_dribbled_past', 'total_pressures', 'total_successful_pressures',
'successful_pressure_percentage', 'total_pressure_defense',
'total_pressure_mid', 'total_pressure_attack', 'total_blocks',
'total_shots_blocked', 'total_shots_saved', 'total_passes_blocked',
'total_interceptions', 'total_tackels_plus_interceptions',
'total_clearances', 'total_mistakes', 'matches'],
dtype='object')
# create new value column in each statistics dataframe
df_stats = df_stats.assign(value="")
df_passing = df_passing.assign(value="")
df_shooting = df_shooting.assign(value="")
df_creation = df_creation.assign(value="")
df_defense = df_defense.assign(value="")
df_miscellaneous = df_miscellaneous.assign(value="")
# Check if new columnds created
df_defense.columns
Index(['player_name', 'nationality', 'position', 'team', 'league', 'age',
'birth_year', 'minutes_played_by_90m', 'total_tackels',
'total_tackels_won', 'total_defensive_tackels', 'total_mid_tackels',
'total_attack_tackels', 'total_dribblers_tackled',
'total_dribbles_contested', 'dribbles_tackeld_by_percentage',
'total_dribbled_past', 'total_pressures', 'total_successful_pressures',
'successful_pressure_percentage', 'total_pressure_defense',
'total_pressure_mid', 'total_pressure_attack', 'total_blocks',
'total_shots_blocked', 'total_shots_saved', 'total_passes_blocked',
'total_interceptions', 'total_tackels_plus_interceptions',
'total_clearances', 'total_mistakes', 'matches', 'value'],
dtype='object')
# assign value from df_value to each dataframe
i = 0
for value in df_stats["value"]:
df_stats["value"][i] = df_values["value"][i]
i = i+1
i = 0
for value in df_passing["value"]:
df_passing["value"][i] = df_values["value"][i]
i = i+1
i = 0
for value in df_shooting["value"]:
df_shooting["value"][i] = df_values["value"][i]
i = i+1
i = 0
for value in df_creation["value"]:
df_creation["value"][i] = df_values["value"][i]
i = i+1
i = 0
for value in df_defense["value"]:
df_defense["value"][i] = df_values["value"][i]
i = i+1
i = 0
for value in df_miscellaneous["value"]:
df_miscellaneous["value"][i] = df_values["value"][i]
i = i+1
# check value columns
df_stats[['player_name','age','position','team','value']]
| player_name | age | position | team | value | |
|---|---|---|---|---|---|
| 0 | Max Aarons | 21 | DF | Norwich City | $24.20m |
| 1 | Yunis Abdelhamid | 33 | DF | Reims | $1.32m |
| 2 | Salis Abdul Samed | 21 | MF | Clermont Foot | $3.30m |
| 3 | Laurent Abergel | 28 | MF | Lorient | $3.30m |
| 4 | Charles Abi | 21 | FW | Saint-Étienne | NaN |
| ... | ... | ... | ... | ... | ... |
| 2916 | Martín Zubimendi | 22 | MF | Real Sociedad | $33.00m |
| 2917 | Szymon Żurkowski | 23 | MF | Empoli | $7.70m |
| 2918 | Martin Ødegaard | 22 | MF | Arsenal | $49.50m |
| 2919 | Milan Đurić | 31 | FW | Salernitana | NaN |
| 2920 | Filip Đuričić | 29 | MF,FW | Sassuolo | NaN |
2921 rows × 5 columns
df_stats.team.unique().shape
(98,)
# Export to csv update dataframes
#Export df_stats
path = r"C:\Python_Projects\CSV\update"
filename = "df_stats_21_06_2021"
export_csv(df_stats,path,filename)
#Export df_passing
path = r"C:\Python_Projects\CSV\update"
filename = "df_passing_21_06_2021"
export_csv(df_passing,path,filename)
#Export df_shooting
path = r"C:\Python_Projects\CSV\update"
filename = "df_shooting_21_06_2021"
export_csv(df_shooting,path,filename)
#Export df_creation
path = r"C:\Python_Projects\CSV\update"
filename = "df_creation_21_06_2021"
export_csv(df_creation,path,filename)
#Export df_defense
path = r"C:\Python_Projects\CSV\update"
filename = "df_defense_21_06_2021"
export_csv(df_defense,path,filename)
#Export df_miscellaneous
path = r"C:\Python_Projects\CSV\update"
filename = "df_miscellaneous_21_06_2021"
export_csv(df_miscellaneous,path,filename)
#Export df_values
path = r"C:\Python_Projects\CSV\update"
filename = "df_values_21_06_2021"
export_csv(df_values,path,filename)
len(df_values)
2921
# Drop rows with NaN values for each dataframe
df_values_na = df_values.dropna(axis=0)
df_stats_na = df_stats.dropna(axis=0)
df_passing_na = df_passing.dropna(axis=0)
df_shooting_na = df_shooting.dropna(axis=0)
df_creation_na = df_creation.dropna(axis=0)
df_defense_na = df_defense.dropna(axis=0)
df_miscellaneous_na = df_miscellaneous.dropna(axis=0)
# Export to csv dataframes without NaN values
#Export df_stats_na
path = r"C:\Python_Projects\CSV\update"
filename = "df_stats_na_21_06_2021"
export_csv(df_stats_na,path,filename)
#Export df_passing_na
path = r"C:\Python_Projects\CSV\update"
filename = "df_passing_na_21_06_2021"
export_csv(df_passing_na,path,filename)
#Export df_shooting_na
path = r"C:\Python_Projects\CSV\update"
filename = "df_shooting_na_21_06_2021"
export_csv(df_shooting_na,path,filename)
#Export df_creation_na
path = r"C:\Python_Projects\CSV\update"
filename = "df_creation_na_21_06_2021"
export_csv(df_creation_na,path,filename)
#Export df_defense_na
path = r"C:\Python_Projects\CSV\update"
filename = "df_defense_na_21_06_2021"
export_csv(df_defense_na,path,filename)
#Export df_miscellaneous_na
path = r"C:\Python_Projects\CSV\update"
filename = "df_miscellaneous_na_21_06_2021"
export_csv(df_miscellaneous_na,path,filename)
#Export df_values_na
path = r"C:\Python_Projects\CSV\update"
filename = "df_values_na_21_06_2021"
export_csv(df_values_na,path,filename)
# Show Specific Player Stats
#df_stats.loc[2385]
# Rename Stats DataFrame Columns
# Columns Description:
'''
mp = matches played
mp_start = matches start in squad
minutes = minutes played
mp_90 = matches played 90 minutes
gls = goals
ast = assists
gls_no_pen = goals no penalty
gls_pen = penalty goals
pen_attempted = penalty attempted
y_cards = yellow cards
r_cards = red cards
gls_90 = goals per 90 minutes
ast_90 = assists per 90 minutes
gls_ast_90 = goals and assists per 90 minutes
gls_no_pen_90 = goals without penalty per 90 minutes
gls_ast_no_pen_90 = goals without penalty and assists per 90 minutes
ex_gls = expected goals
ex_gls_no_pen = expected goals without penalty
ex_ast = expected assists
ex_gls_ast_no_pen = expected goals and assists without penalty
ex_ast_90 = expected assists per 90 minutes
ex_gls_ast_90 = expected goals and assists per 90 minutes
ex_gls_no_pen_90 = expected goals without penalty per 90 minutes
ex_gls_ast_no_pen_90 = expected goals and assists without penalty per 90 minutes
'''
df_stats_na.rename(columns = {'player_name':'name', 'nationality':'nation', 'position':'pos', 'birth_year':'born', 'match_played':'mp',
'match_starts':'mp_start', 'minutes_played':'minutes', 'minutes_played_by_90m':'mp_90', 'goals':'gls', 'assists':'ast',
'goals_no_pen':'gls_no_pen', 'goals_pen':'gls_pen', 'pens_att':'pen_attempted', 'yellow_card':'y_cards', 'red_cards':'r_cards',
'goals_per_90':'gls_90', 'assists_per_90':'ast_90', 'goals_and_assists_per_90':'gls_ast_90',
'goals_no_pen_per_90':'gls_no_pen_90', 'goals_no_pen_and_assists_per_90':'gls_ast_no_pen_90', 'expected_goals':'ex_gls',
'expected_goals_no_pen':'ex_gls_no_pen', 'expected_assists':'ex_ast', 'expected_goals_and_assists_no_pen':'ex_gls_ast_no_pen',
'expected_goals_per_90':'ex_gls_90', 'expected_assists_per_90':'ex_ast_90', 'expected_goals_and_assists_per_90':'ex_gls_ast_90',
'expected_goals_no_pen_per_90':'ex_gls_no_pen_90', 'expected_goals_and_assists_no_pen_per_90':'ex_gls_ast_no_pen_90'}, inplace = True)
df_stats_na.columns
Index(['name', 'nation', 'pos', 'team', 'league', 'age', 'born', 'mp',
'mp_start', 'minutes', 'minutes_90', 'gls', 'ast', 'gls_no_pen',
'gls_pen', 'pen_attempted', 'y_cards', 'r_cards', 'gls_90', 'ast_90',
'gls_ast_90', 'gls_no_pen_90', 'gls_ast_no_pen_90', 'ex_gls',
'ex_gls_no_pen', 'ex_ast', 'ex_gls_ast_no_pen', 'ex_gls_90',
'ex_ast_90', 'ex_gls_ast_90', 'ex_gls_no_pen_90',
'ex_gls_ast_no_pen_90', 'matches', 'value'],
dtype='object')
# Rename Shooting DataFrame Columns
# Columns Description:
'''
shots = total shots
shots_target = shots on target
shots_target_% = shots on target percent
shots_90 = total shots per 90 minutes
shots_target_90 = shots on target per 90 minutes
gls_per_shots = goals per shots
gls_per_shots_target = goals per shots on target
avg_shot_dist = average shot distance
fk_shots = free kick shots
pen_made = penalty made
pen_attempted = penalty attempted
ex_gls = expected goals
ex_gls_no_pen = expected goals without penalty
ex_gls_shots_no_pen = expected goals per shots without penalty
gls_minus_ex_gls = goals minus expected goals
gls_minus_ex_gls_no_pen = goals minus expected goals without penalty
'''
df_shooting_na.rename(columns = {'player_name':'name', 'nationality':'nation', 'position':'pos', 'birth_year':'born',
'match_played':'mp', 'match_by_90m':'mp_90', 'goals':'gls', 'total_shots':'shots', 'shots_on_target':'shots_target',
'shots_on_target_percent':'shots_target_%', 'total_shots_per_90m':'shots_90', 'shots_on_target_per_90m':'shots_target_90',
'goals_per_shots':'gls_shots', 'goals_per_shot_on_target':'gls_shots_target', 'goals_per_shots':'gls_shots',
'goals_per_shot_on_target':'gls_shots_target', 'average_shot_distance_meter':'avg_shot_dist', 'free_kick_shots':'fk_shots',
'pens_made':'pen_made', 'pens_attempted':'pen_attempted', 'expected_goals':'ex_gls', 'expected_goals_no_pens':'ex_gls_no_pen',
'expected_goal_per_shot_no_pens':'ex_gls_shots_no_pen', 'goals_minus_expected_goals':'gls_minus_ex_gls',
'non_pens_goals_minus_expected_pens_goals':'gls_minus_ex_gls_no_pen'}, inplace = True)
df_shooting_na.columns
Index(['name', 'nation', 'pos', 'team', 'league', 'age', 'born', 'mp_90',
'gls', 'shots', 'shots_target', 'shots_target_%', 'shots_90',
'shots_target_90', 'gls_shots', 'gls_shots_target', 'avg_shot_dist',
'fk_shots', 'pen_made', 'pen_attempted', 'ex_gls', 'ex_gls_no_pen',
'ex_gls_shots_no_pen', 'gls_minus_ex_gls', 'gls_minus_ex_gls_no_pen',
'matches', 'value'],
dtype='object')
# Rename Passing DataFrame Columns
# Columns Description:
'''
pass_completed = total pass completed
pass_attempted = total pass attempted
pass_completed_% = pass completed percentage
all_pass_dist = total pass distance
all_pass_dist_forward = total distance forward pass
short_pass_% = shots pass percentage
mid_pass_% = mid pass percentage
long_pass_% = long pass percentage
ex_ast = expected assists
ast_minus_ex_ast = expected assists minus assists
pass_to_shot = pass lead to shot
progressive_pass = forward pass
'''
df_passing_na.rename(columns = {'player_name':'name', 'nationality':'nation', 'position':'pos', 'birth_year':'born',
'match_played':'mp', 'match_by_90m':'mp_90', 'total_pass_completed':'pass_completed', 'total_pass_attempted':'pass_attempted',
'pass_completed_percentage':'pass_completed_%', 'total_pass_dist':'all_pass_dist', 'total_pass_dist_forward':'all_pass_dist_forward',
'short_pass_percentage':'short_pass_%', 'mid_pass_percentage':'mid_pass_%', 'long_pass_percentage':'long_pass_%',
'long_pass_percentage':'long_pass_%', 'assists':'ast', 'expected_assists':'ex_ast',
'assists_minus_expected_assists':'ast_minus_ex_ast', 'pass_lead_to_shot':'pass_to_shot',
'pass_30_court(na)':'pass_30', 'pass_18_court(na)':'pass_18', 'crosses_18_court(na)':'cross_18',
'progressive_pass(na)':'progressive_pass'}, inplace = True)
df_passing_na.columns
Index(['name', 'nation', 'pos', 'team', 'league', 'age', 'born',
'minutes_played_by_90m', 'pass_completed', 'pass_attempted',
'pass_completed_%', 'all_pass_dist', 'all_pass_dist_forward',
'short_pass_completed', 'short_pass_attempted', 'short_pass_%',
'mid_pass_completed', 'mid_pass_attempted', 'mid_pass_%',
'long_pass_completed', 'long_pass_attempted', 'long_pass_%', 'ast',
'ex_ast', 'ast_minus_ex_ast', 'pass_to_shot', 'pass_30', 'pass_18',
'cross_18', 'progressive_pass', 'matches', 'value'],
dtype='object')
# Rename Creation DataFrame Columns
# Columns Description:
'''
shot_created_90 = shots created per 90 minutes
shot_to_attempt = shots lead to attempt
defense_to_attempt = defense action lead to attempt
goal_creation_90 = goal creation per 90 minuts
pass_to_goal = pass lead to goal
miss_pass_to_goal = miss pass lead to goal
dribble_to_goal = dribble action lead to goal
shots_to_goal = shots lead to goal
fouls_to_goal = fouls earned lead to goal
defense_to_goal = defense action lead to goal
'''
df_creation_na.rename(columns = {'player_name':'name', 'nationality':'nation', 'position':'pos', 'birth_year':'born',
'match_played':'mp', 'match_by_90m':'mp_90', 'total_shots_creation':'shot_created',
'shot_creation_by_90m':'shot_created_90', 'total_success_pass':'pass_completed', 'total_miss_pass':'pass_missed',
'total_success_dribble':'dribble_completed', 'total_shots_lead_to_attempt':'shot_to_attempt',
'total_earned_fouls':'earned_fouls', 'defense_action_lead_to_attempt':'defense_to_attempt', 'total_goal_creation':'goal_creation',
'goal_creation_by_90m':'goal_creation_90', 'total_pass_lead_to_goal':'pass_to_goal', 'total_miss_pass_lead_to_goal':'miss_pass_to_goal',
'total_dribble_lead_to_goal':'dribble_to_goal', 'total_shots_lead_to_goal':'shots_to_goal', 'total_earned_fould_lead_to_goal':'fouls_to_goal',
'defense_action_lead_to_goal':'defense_to_goal'}, inplace = True)
df_creation_na.columns
Index(['name', 'nation', 'pos', 'team', 'league', 'age', 'born',
'minutes_played_by_90m', 'shot_created', 'shot_created_90',
'pass_completed', 'pass_missed', 'dribble_completed', 'shot_to_attempt',
'earned_fouls', 'defense_to_attempt', 'goal_creation',
'goal_creation_90', 'pass_to_goal', 'miss_pass_to_goal',
'dribble_to_goal', 'shots_to_goal', 'fouls_to_goal', 'defense_to_goal',
'matches', 'value'],
dtype='object')
# Rename miscellaneous DataFrame Columns
# Columns Description:
'''
2y_cards = second yellow card
w_tackels = won tackels
'''
df_miscellaneous_na.rename(columns = {'player_name':'name', 'nationality':'nation', 'position':'pos', 'birth_year':'born',
'match_played':'mp', 'match_by_90m':'mp_90', 'yellow_cards':'y_cards', 'red_cards':'r_cards',
'second_yellow_card':'2y_cards', 'fouls_drawn':'earned_fouls', 'crosses':'dribble', 'tackels_won':'w_tackels',
'pens_won':'pen_earned', 'pens_conceded':'pen_made', 'own_goals':'own_gls', 'ball_recoveries':'recoveries',
'aerials_won':'air_tackels_won', 'aerials_lost':'air_tackels_loss', 'aerials_won_percent':'air_tackels_won_%'}, inplace = True)
df_miscellaneous_na.columns
Index(['name', 'nation', 'pos', 'team', 'league', 'age', 'born',
'minutes_by_90', 'y_cards', 'r_cards', '2y_cards', 'fouls_commited',
'earned_fouls', 'offsides', 'dribble', 'interceptions', 'w_tackels',
'pen_earned', 'pen_made', 'own_gls', 'recoveries', 'air_tackels_won',
'air_tackels_loss', 'air_tackels_won_%', 'matches', 'value'],
dtype='object')
# Rename defense DataFrame Columns
# Columns Description:
'''
w_tackels = won tackels
def_tackels = deffensive tackels
att_tackels = attack tackels
dribble_faced = dribble faced againt
def_pressure = defensive pressure
att_pressure = attack pressure
blk = total blocks
shot_blk = total shot blocked
pass_blk = total pass blocked
'''
df_defense_na.rename(columns = {'player_name':'name', 'nationality':'nation', 'position':'pos', 'birth_year':'born',
'match_played':'mp', 'match_by_90m':'mp_90', 'total_tackels':'tackels', 'total_tackels_won':'w_tackels',
'total_defensive_tackels':'def_tackels', 'total_mid_tackels':'mid_tackels', 'total_attack_tackels':'att_tackels',
'total_dribblers_tackled':'dribble_tackeld', 'total_dribbles_contested':'dribble_faced',
'dribbles_tackeld_by_percentage':'dribble_tackeld_%', 'total_dribbled_past':'dribble_miss_tackels',
'total_pressures':'pressures', 'total_successful_pressures':'good_pressures', 'successful_pressure_percentage':'good_pressures_%',
'total_pressure_defense':'def_pressure', 'total_pressure_mid':'mid_pressure', 'total_pressure_attack':'att_pressure',
'total_blocks':'blk', 'total_shots_blocked':'shot_blk', 'total_shots_saved':'shot_save', 'total_passes_blocked':'pass_blk',
'total_interceptions':'interceptions', 'total_tackels_plus_interceptions':'tackels_and_interceptions',
'total_clearances':'clearances'}, inplace = True)
df_defense_na.columns
Index(['name', 'nation', 'pos', 'team', 'league', 'age', 'born',
'minutes_played_by_90m', 'tackels', 'w_tackels', 'def_tackels',
'mid_tackels', 'att_tackels', 'dribble_tackeld', 'dribble_faced',
'dribble_tackeld_%', 'dribble_miss_tackels', 'pressures',
'good_pressures', 'good_pressures_%', 'def_pressure', 'mid_pressure',
'att_pressure', 'blk', 'shot_blk', 'shot_save', 'pass_blk',
'interceptions', 'tackels_and_interceptions', 'clearances',
'total_mistakes', 'matches', 'value'],
dtype='object')
#number of rows before
df_stats_na.shape[0]
2210
'''
check rows with column value = "-"
df_stats_na.loc[df_stats_na['value'] == '-']
'''
df_stats_na = df_stats_na[df_stats_na.value != '-']
df_passing_na = df_passing_na[df_passing_na.value != '-']
df_shooting_na = df_shooting_na[df_shooting_na.value != '-']
df_creation_na = df_creation_na[df_creation_na.value != '-']
df_defense_na = df_defense_na[df_defense_na.value != '-']
df_miscellaneous_na = df_miscellaneous_na[df_miscellaneous_na.value != '-']
#number of rows after
df_stats_na.shape[0]
2173
df_stats_na[df_stats_na.name.duplicated()]
| name | nation | pos | team | league | age | born | mp | mp_start | minutes | ... | ex_gls_no_pen | ex_ast | ex_gls_ast_no_pen | ex_gls_90 | ex_ast_90 | ex_gls_ast_90 | ex_gls_no_pen_90 | ex_gls_ast_no_pen_90 | matches | value | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1036 | Nicolás González | ar ARG | FW | Fiorentina | it Serie A | 23 | 1998 | 33 | 26 | 2,357 | ... | 7.1 | 3.8 | 10.9 | 0.36 | 0.15 | 0.50 | 0.27 | 0.42 | Matches | $27.50m |
| 1355 | Moise Kean | it ITA | FW | Juventus | it Serie A | 21 | 2000 | 32 | 12 | 1,098 | ... | 4.1 | 0.1 | 4.2 | 0.34 | 0.01 | 0.35 | 0.34 | 0.35 | Matches | $26.40m |
| 2067 | João Pedro | it ITA | FW | Cagliari | it Serie A | 29 | 1992 | 37 | 37 | 3,323 | ... | 9.9 | 3.1 | 13.0 | 0.35 | 0.08 | 0.43 | 0.27 | 0.35 | Matches | $13.20m |
3 rows × 34 columns
df_stats_na[df_stats_na.name == "João Pedro"]
| name | nation | pos | team | league | age | born | mp | mp_start | minutes | ... | ex_gls_no_pen | ex_ast | ex_gls_ast_no_pen | ex_gls_90 | ex_ast_90 | ex_gls_ast_90 | ex_gls_no_pen_90 | ex_gls_ast_no_pen_90 | matches | value | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2066 | João Pedro | br BRA | FW,MF | Watford | eng Premier League | 19 | 2001 | 28 | 15 | 1,644 | ... | 4.2 | 2.6 | 6.8 | 0.23 | 0.14 | 0.37 | 0.23 | 0.37 | Matches | $15.40m |
| 2067 | João Pedro | it ITA | FW | Cagliari | it Serie A | 29 | 1992 | 37 | 37 | 3,323 | ... | 9.9 | 3.1 | 13.0 | 0.35 | 0.08 | 0.43 | 0.27 | 0.35 | Matches | $13.20m |
2 rows × 34 columns
# Reset Dataframes Index fter dropna
df_stats_na = df_stats_na.reset_index(drop=True)
df_passing_na = df_passing_na.reset_index(drop=True)
df_shooting_na = df_shooting_na.reset_index(drop=True)
df_creation_na = df_creation_na.reset_index(drop=True)
df_defense_na = df_defense_na.reset_index(drop=True)
df_miscellaneous_na = df_miscellaneous_na.reset_index(drop=True)
# Replace player value .Th with K (for each dataframe)
i=0
for row in df_stats_na["value"]:
df_stats_na["value"][i] = df_stats_na["value"][i].replace("Th.","K")
i=i+1
i=0
for row in df_passing_na["value"]:
df_passing_na["value"][i] = df_passing_na["value"][i].replace("Th.","K")
i=i+1
i=0
for row in df_shooting_na["value"]:
df_shooting_na["value"][i] = df_shooting_na["value"][i].replace("Th.","K")
i=i+1
i=0
for row in df_creation_na["value"]:
df_creation_na["value"][i] = df_creation_na["value"][i].replace("Th.","K")
i=i+1
i=0
for row in df_defense_na["value"]:
df_defense_na["value"][i] = df_defense_na["value"][i].replace("Th.","K")
i=i+1
i=0
for row in df_miscellaneous_na["value"]:
df_miscellaneous_na["value"][i] = df_miscellaneous_na["value"][i].replace("Th.","K")
i=i+1
# Remove matches column from each dataframe
# Run only once
df_stats_na = df_stats_na.drop(columns = "matches")
df_passing_na = df_passing_na.drop(columns = "matches")
df_shooting_na = df_shooting_na.drop(columns = "matches")
df_creation_na = df_creation_na.drop(columns = "matches")
df_defense_na = df_defense_na.drop(columns = "matches")
df_miscellaneous_na = df_miscellaneous_na.drop(columns = "matches")
# All players position type:
df_stats_na["pos"].unique()
array(['DF', 'MF', 'FW', 'MF,FW', 'FW,MF', 'FW,DF', 'GK', 'DF,MF',
'MF,DF', 'DF,FW', 'GK,MF'], dtype=object)
# Functio to define player position
'''
Goalkeeper
Defender (Centre-back, Sweeper, Full-back, Wing-back)
Midfielder (Centre midfield, Defensive midfield, Attacking midfield, Wide midfield)
Forward (Centre forward, Second striker, Winger)
'''
def define_position(pos):
if(pos == "DF"):
pod = "DEF"
return pos
elif(pos == "MF"):
pos = "MID"
return pos
elif(pos == "FW"):
pos = "ATT"
return pos
elif(pos == "MF,FW"):
pos = "ATT"
return pos
elif(pos == "FW,MF"):
pos = "ATT"
return pos
elif(pos == "FW,DF"):
pos = "DEF"
return pos
elif(pos == "GK"):
return pos
elif(pos == "DF,MF"):
pos = "MID"
return pos
elif(pos == "MF,DF"):
pos = "MID"
return pos
elif(pos == "DF,FW"):
pos = "DEF"
return pos
elif(pos == "GK,MF"):
pos = "GK"
return pos
# Change Player Position by define_position function
i=0
for row in df_stats_na["pos"]:
position = define_position(df_stats_na["pos"][i])
df_stats_na["pos"][i] = position
i=i+1
i=0
for row in df_passing_na["pos"]:
position = define_position(df_passing_na["pos"][i])
df_passing_na["pos"][i] = position
i=i+1
i=0
for row in df_shooting_na["pos"]:
position = define_position(df_shooting_na["pos"][i])
df_shooting_na["pos"][i] = position
i=i+1
i=0
for row in df_creation_na["pos"]:
position = define_position(df_creation_na["pos"][i])
df_creation_na["pos"][i] = position
i=i+1
i=0
for row in df_defense_na["pos"]:
position = define_position(df_defense_na["pos"][i])
df_defense_na["pos"][i] = position
i=i+1
i=0
for row in df_miscellaneous_na["pos"]:
position = define_position(df_miscellaneous_na["pos"][i])
df_miscellaneous_na["pos"][i] = position
i=i+1
# Export Dataframes with Updates Columns
#Export df_stats_na
path = r"C:\Python_Projects\CSV\update"
filename = "df_stats_na_col_23_06_2021"
export_csv(df_stats_na,path,filename)
#Export df_passing_na
path = r"C:\Python_Projects\CSV\update"
filename = "df_passing_na_col_23_06_2021"
export_csv(df_passing_na,path,filename)
#Export df_shooting_na
path = r"C:\Python_Projects\CSV\update"
filename = "df_shooting_na_col_23_06_2021"
export_csv(df_shooting_na,path,filename)
#Export df_creation_na
path = r"C:\Python_Projects\CSV\update"
filename = "df_creation_na_col_23_06_2021"
export_csv(df_creation_na,path,filename)
#Export df_defense_na
path = r"C:\Python_Projects\CSV\update"
filename = "df_defense_na_col_23_06_2021"
export_csv(df_defense_na,path,filename)
#Export df_miscellaneous_na
path = r"C:\Python_Projects\CSV\update"
filename = "df_miscellaneous_na_col_23_06_2021"
export_csv(df_miscellaneous_na,path,filename)
# Function to merge dataframes without duplicate columns and without indexing
def merge_dataframe(df_1,df_2):
df_merge = pd.DataFrame()
# difference columns between df_2 to df_1
diff_cols = df_2.columns.difference(df_1)
# merge dataframe without duplicate columns
df_merge = pd.merge(df_1, df_2[diff_cols],left_index=False, right_index=False, how='outer')
df_merge = df_merge.reset_index(drop=True)
return df_merge
# create temp copies of dataframes for merge
df_merge_stats_1 = df_stats_na
df_merge_passing_2 = df_passing_na
df_merge_shooting_3 = df_shooting_na
df_merge_defense_4 = df_defense_na
df_merge_creation_5 = df_creation_na
df_merge_miscellaneous_6 = df_miscellaneous_na
# merge 1 and 2
df_merge_12 = merge_dataframe(df_merge_stats_1,df_merge_passing_2)
# merge 12 and 3
df_merge_123 = merge_dataframe(df_merge_12,df_merge_shooting_3)
# merge 123 and 4
df_merge_1234 = merge_dataframe(df_merge_123,df_merge_defense_4)
df_merge_1234.shape
(2173, 91)
# merge 5 and 6 - not work
#df_merge_56 = merge_dataframe(df_merge_creation_5,df_merge_miscellaneous_6)
df_merge_56 = pd.DataFrame()
diff_cols = df_merge_miscellaneous_6.columns.difference(df_merge_creation_5)
df_merge_56 = pd.merge(df_merge_creation_5, df_merge_miscellaneous_6[diff_cols],left_index=True, right_index=True, how='outer')
df_merge_56.shape
(2173, 50)
df_merge_56
| name_x | nation_x | pos_x | team_x | league_x | age_x | born_x | minutes_played_by_90m | shot_created | shot_created_90 | ... | own_gls | pen_earned | pen_made | pos_y | r_cards | recoveries | team_y | value_y | w_tackels | y_cards | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | Max Aarons | eng ENG | DF | Norwich City | eng Premier League | 21 | 2000 | 32.0 | 38 | 1.19 | ... | 1 | 0 | 2 | DF | 0 | 177 | Norwich City | $24.20m | 37 | 8 |
| 1 | Yunis Abdelhamid | ma MAR | DF | Reims | fr Ligue 1 | 33 | 1987 | 33.1 | 21 | 0.63 | ... | 0 | 0 | 1 | DF | 1 | 224 | Reims | $1.32m | 46 | 5 |
| 2 | Salis Abdul Samed | gh GHA | MID | Clermont Foot | fr Ligue 1 | 21 | 2000 | 27.4 | 40 | 1.46 | ... | 0 | 0 | 0 | MID | 3 | 240 | Clermont Foot | $3.30m | 34 | 12 |
| 3 | Laurent Abergel | fr FRA | MID | Lorient | fr Ligue 1 | 28 | 1993 | 32.8 | 66 | 2.01 | ... | 0 | 0 | 0 | MID | 0 | 291 | Lorient | $3.30m | 73 | 9 |
| 4 | Dickson Abiama | ng NGA | ATT | Greuther Fürth | de Bundesliga | 22 | 1998 | 8.1 | 20 | 2.48 | ... | 0 | 0 | 0 | ATT | 0 | 39 | Greuther Fürth | $880K | 7 | 3 |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 2168 | Petar Zovko | ba BIH | GK | Spezia | it Serie A | 19 | 2002 | 0.3 | 0 | 0.00 | ... | 0 | 0 | 0 | GK | 0 | 1 | Spezia | $110K | 0 | 1 |
| 2169 | Igor Zubeldia | es ESP | DF | Real Sociedad | es La Liga | 24 | 1997 | 18.3 | 8 | 0.44 | ... | 0 | 0 | 1 | DF | 0 | 168 | Real Sociedad | $16.50m | 15 | 7 |
| 2170 | Martín Zubimendi | es ESP | MID | Real Sociedad | es La Liga | 22 | 1999 | 28.8 | 34 | 1.18 | ... | 0 | 0 | 0 | MID | 0 | 271 | Real Sociedad | $33.00m | 32 | 4 |
| 2171 | Szymon Żurkowski | pl POL | MID | Empoli | it Serie A | 23 | 1997 | 25.6 | 60 | 2.34 | ... | 0 | 0 | 1 | MID | 0 | 206 | Empoli | $7.70m | 49 | 5 |
| 2172 | Martin Ødegaard | no NOR | MID | Arsenal | eng Premier League | 22 | 1998 | 30.9 | 134 | 4.33 | ... | 0 | 0 | 2 | MID | 0 | 230 | Arsenal | $49.50m | 25 | 4 |
2173 rows × 50 columns
#Export merge dataframes
path = r"C:\Python_Projects\CSV\update"
filename = "df_stats_passing_shooting_defense_23_06_2021"
export_csv(df_merge_1234,path,filename)
path = r"C:\Python_Projects\CSV\update"
filename = "df_creation_miscellaneous_23_06_2021"
export_csv(df_merge_56,path,filename)
# Colums to delete from df_merge_1234
'''
born, minutes, minutes_90, pen_attempted, gls_ast_90, gls_no_pen_90, gls_ast_no_pen_90, ex_gls_no_pen, ex_gls_ast_no_pen,
ex_gls_ast_90, ex_gls_no_pen_90, ex_gls_ast_no_pen_90, all_pass_dist, cross_18, long_pass_attempted, long_pass_completed,
mid_pass_attempted, mid_pass_completed, minutes_played_by_90m, pass_18, pass_30, pass_attempted, pass_completed,
pass_to_shot, short_pass_attempted, short_pass_completed, avg_shot_dist, fk_shots, gls_minus_ex_gls_no_pen, gls_shots_target,
shots, shots_target, att_tackels, def_pressure, good_pressures, good_pressures_%, mid_pressure, pressures,
tackels_and_interceptions
'''
df_merge_1234_backup = df_merge_1234.copy()
#car_df.drop(['safety_rating', 'passenger_capacity'], axis = 1, inplace = True)
df_merge_1234 = df_merge_1234.drop(['born','minutes','minutes_90','pen_attempted','gls_ast_90','gls_no_pen_90',
'gls_ast_no_pen_90','ex_gls_no_pen','ex_gls_ast_no_pen','ex_gls_ast_90','ex_gls_no_pen_90',
'all_pass_dist','cross_18','long_pass_attempted','long_pass_completed','mid_pass_attempted',
'mid_pass_completed','minutes_played_by_90m','pass_18','pass_30','pass_attempted',
'pass_completed','pass_to_shot','short_pass_attempted','short_pass_completed',
'short_pass_completed','avg_shot_dist','fk_shots','gls_minus_ex_gls_no_pen',
'gls_shots_target','shots','shots_target','att_tackels','def_pressure','good_pressures',
'good_pressures_%','mid_pressure','pressures','tackels_and_interceptions'], axis=1)
# After remove the unnecessary columns
# Before : 91 columns
# After 53 columns
df_merge_1234.shape
(2173, 53)
df_merge_56 = load_csv(r"C:\Python_Projects\CSV\tests\df_creation_miscellaneous_24_06_2021.csv")
df_merge_56
| name | nation | pos | team | league | age | born | shot_created_90 | dribble_completed | dribble_to_goal | value | 2y_cards | air_tackels_loss | air_tackels_won | air_tackels_won_% | dribble | earned_fouls | fouls_commited | offsides | own_gls | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | Max Aarons | eng ENG | DF | Norwich City | eng Premier League | 21 | 2000 | 1.19 | 3 | 0 | $24.20m | 0 | 51 | 15 | 22.7 | 45 | 59 | 31 | 1 | 1 |
| 1 | Yunis Abdelhamid | ma MAR | DF | Reims | fr Ligue 1 | 33 | 1987 | 0.63 | 3 | 1 | $1.32m | 0 | 45 | 67 | 59.8 | 2 | 24 | 43 | 0 | 0 |
| 2 | Salis Abdul Samed | gh GHA | MID | Clermont Foot | fr Ligue 1 | 21 | 2000 | 1.46 | 0 | 0 | $3.30m | 2 | 24 | 24 | 50.0 | 10 | 35 | 45 | 0 | 0 |
| 3 | Laurent Abergel | fr FRA | MID | Lorient | fr Ligue 1 | 28 | 1993 | 2.01 | 1 | 0 | $3.30m | 0 | 14 | 14 | 50.0 | 26 | 68 | 46 | 1 | 0 |
| 4 | Dickson Abiama | ng NGA | ATT | Greuther Fürth | de Bundesliga | 22 | 1998 | 2.48 | 0 | 0 | $880K | 0 | 40 | 22 | 35.5 | 2 | 12 | 18 | 15 | 0 |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 2168 | Petar Zovko | ba BIH | GK | Spezia | it Serie A | 19 | 2002 | 0.00 | 0 | 0 | $110K | 0 | 0 | 0 | NaN | 0 | 0 | 0 | 0 | 0 |
| 2169 | Igor Zubeldia | es ESP | DF | Real Sociedad | es La Liga | 24 | 1997 | 0.44 | 0 | 0 | $16.50m | 0 | 39 | 48 | 55.2 | 4 | 7 | 26 | 1 | 0 |
| 2170 | Martín Zubimendi | es ESP | MID | Real Sociedad | es La Liga | 22 | 1999 | 1.18 | 0 | 0 | $33.00m | 0 | 40 | 77 | 65.8 | 3 | 24 | 46 | 3 | 0 |
| 2171 | Szymon Żurkowski | pl POL | MID | Empoli | it Serie A | 23 | 1997 | 2.34 | 1 | 0 | $7.70m | 0 | 40 | 26 | 39.4 | 19 | 73 | 50 | 0 | 0 |
| 2172 | Martin Ødegaard | no NOR | MID | Arsenal | eng Premier League | 22 | 1998 | 4.33 | 6 | 0 | $49.50m | 0 | 25 | 17 | 40.5 | 26 | 23 | 32 | 3 | 0 |
2173 rows × 20 columns
#df_all_merge = merge_dataframe(df_merge_1234,df_merge_56)
diff_cols_2 = df_merge_56.columns.difference(df_merge_1234.columns)
df_all_merge = pd.merge(df_merge_1234, df_merge_56[diff_cols_2],left_index=True, right_index=True, how='outer')
#df_all_merge = merge_dataframe(df_merge_1234,df_merge_56)
df_all_merge.head()
| name | nation | pos | team | league | age | mp | mp_start | gls | ast | ... | air_tackels_won_% | born | dribble | dribble_completed | dribble_to_goal | earned_fouls | fouls_commited | offsides | own_gls | shot_created_90 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | Max Aarons | eng ENG | DF | Norwich City | eng Premier League | 21 | 34 | 32 | 0 | 2 | ... | 22.7 | 2000 | 45 | 3 | 0 | 59 | 31 | 1 | 1 | 1.19 |
| 1 | Yunis Abdelhamid | ma MAR | DF | Reims | fr Ligue 1 | 33 | 34 | 34 | 2 | 0 | ... | 59.8 | 1987 | 2 | 3 | 1 | 24 | 43 | 0 | 0 | 0.63 |
| 2 | Salis Abdul Samed | gh GHA | MID | Clermont Foot | fr Ligue 1 | 21 | 31 | 29 | 1 | 0 | ... | 50.0 | 2000 | 10 | 0 | 0 | 35 | 45 | 0 | 0 | 1.46 |
| 3 | Laurent Abergel | fr FRA | MID | Lorient | fr Ligue 1 | 28 | 34 | 34 | 0 | 2 | ... | 50.0 | 1993 | 26 | 1 | 0 | 68 | 46 | 1 | 0 | 2.01 |
| 4 | Dickson Abiama | ng NGA | ATT | Greuther Fürth | de Bundesliga | 22 | 24 | 5 | 0 | 1 | ... | 35.5 | 1998 | 2 | 0 | 0 | 12 | 18 | 15 | 0 | 2.48 |
5 rows × 66 columns
# Export all_df_merge
path = "C:\Python_Projects\CSV"
filename = "df_all_merge_24_06_2022"
export_csv(df_all_merge,path,filename)
df_all_merge.shape
(2173, 66)
df_all_merge["value"][4]
'$880K'
def convert_value_k_to_m(value):
value = value.replace('K','')
value = value.replace('$','')
value = int(value)
value = (value/1000)
value = "$"+str(value)+"m"
return value
df_all_merge_backup = df_all_merge.copy()
# Conver all K value to M
i=0
for row in df_all_merge["value"]:
value = df_all_merge["value"][i]
if "K" in value:
new_value = convert_value_k_to_m(value)
df_all_merge["value"][i] = new_value
i=i+1
df_all_merge["value"].head()
0 $24.20m 1 $1.32m 2 $3.30m 3 $3.30m 4 $0.88m Name: value, dtype: object
# Export all_df_merge
path = "C:\Python_Projects\CSV"
filename = "df_all_merge_24_06_2022"
export_csv(df_all_merge,path,filename)
# Player Distribution by league
'''
eng Premier League
fr Ligue 1
it Serie A
es La Liga
de Bundesliga
'''
players_dist = df_all_merge["league"].value_counts()
data = players_dist
data.plot(kind="bar")
plt.title("Players league distribution")
plt.xlabel("League")
plt.ylabel("Players")
plt.show()
df_players = df_all_merge.copy()
#'DF', 'MID', 'ATT', 'DEF', 'GK'
def define_position_2(pos):
if (pos == "DF"):
pos = "DEF"
return pos
elif (pos == "MID"):
return pos
elif (pos == "ATT"):
return pos
elif (pos == "DEF"):
return pos
elif (pos == "GK"):
return pos
df_all_merge["pos"].unique()
array(['DEF', 'MID', 'ATT', 'GK'], dtype=object)
i=0
for row in df_all_merge["pos"]:
position = define_position_2(df_all_merge["pos"][i])
df_all_merge["pos"][i] = position
i=i+1
C:\Users\PELEGL~1\AppData\Local\Temp/ipykernel_13576/2878682629.py:4: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy df_all_merge["pos"][i] = position
df_all_merge["pos"].unique()
array(['DEF', 'MID', 'ATT', 'GK'], dtype=object)
# Function to substring price
def priceSubstring(value):
value = value.replace('m','')
value = value.replace('$','')
return value
# Change players value by substring
i=0
for row in df_players["value"]:
value = df_players["value"][i]
new_value = priceSubstring(value)
df_players["value"][i] = new_value
i=i+1
C:\Users\PELEGL~1\AppData\Local\Temp/ipykernel_13576/2656539669.py:6: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy df_players["value"][i] = new_value
# list columns to change to float
cols_to_convert=[
'age',
'mp',
'mp_start',
'gls',
'ast',
'gls_no_pen',
'gls_pen',
'y_cards',
'r_cards',
'gls_90',
'ast_90',
'ex_gls',
'ex_ast',
'ex_gls_90',
'ex_ast_90',
'ex_gls_ast_no_pen_90',
'all_pass_dist_forward',
'ast_minus_ex_ast',
'long_pass_%',
'mid_pass_%',
'pass_completed_%',
'progressive_pass',
'short_pass_%',
'ex_gls_shots_no_pen',
'gls_minus_ex_gls',
'gls_shots',
'mp_90',
'pen_made',
'shots_90',
'shots_target_%',
'shots_target_90',
'att_pressure',
'blk',
'clearances',
'def_tackels',
'dribble_faced',
'dribble_miss_tackels',
'dribble_tackeld',
'dribble_tackeld_%',
'interceptions',
'mid_tackels',
'pass_blk',
'shot_blk',
'shot_save',
'tackels',
'total_mistakes',
'w_tackels',
'2y_cards',
'air_tackels_loss',
'air_tackels_won',
'air_tackels_won_%',
'born',
'dribble',
'dribble_completed',
'dribble_to_goal',
'earned_fouls',
'fouls_commited',
'offsides',
'own_gls',
'shot_created_90'
]
for col in cols_to_convert:
df_players[col] = pd.to_numeric(df_players[col],errors='coerce').astype('float')
df_players.info()
<class 'pandas.core.frame.DataFrame'> RangeIndex: 2173 entries, 0 to 2172 Data columns (total 66 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 name 2173 non-null object 1 nation 2173 non-null object 2 pos 2173 non-null object 3 team 2173 non-null object 4 league 2173 non-null object 5 age 2173 non-null float64 6 mp 2173 non-null float64 7 mp_start 2173 non-null float64 8 gls 2173 non-null float64 9 ast 2173 non-null float64 10 gls_no_pen 2173 non-null float64 11 gls_pen 2173 non-null float64 12 y_cards 2173 non-null float64 13 r_cards 2173 non-null float64 14 gls_90 2173 non-null float64 15 ast_90 2173 non-null float64 16 ex_gls 2173 non-null float64 17 ex_ast 2173 non-null float64 18 ex_gls_90 2173 non-null float64 19 ex_ast_90 2173 non-null float64 20 ex_gls_ast_no_pen_90 2173 non-null float64 21 value 2173 non-null float64 22 all_pass_dist_forward 2173 non-null float64 23 ast_minus_ex_ast 2173 non-null float64 24 long_pass_% 2107 non-null float64 25 mid_pass_% 2138 non-null float64 26 pass_completed_% 2167 non-null float64 27 progressive_pass 2173 non-null float64 28 short_pass_% 2149 non-null float64 29 ex_gls_shots_no_pen 1812 non-null float64 30 gls_minus_ex_gls 2173 non-null float64 31 gls_shots 1812 non-null float64 32 mp_90 2173 non-null float64 33 pen_made 2173 non-null float64 34 shots_90 2173 non-null float64 35 shots_target_% 1812 non-null float64 36 shots_target_90 2173 non-null float64 37 att_pressure 2173 non-null float64 38 blk 2173 non-null float64 39 clearances 2173 non-null float64 40 def_tackels 2173 non-null float64 41 dribble_faced 2173 non-null float64 42 dribble_miss_tackels 2173 non-null float64 43 dribble_tackeld 2173 non-null float64 44 dribble_tackeld_% 1932 non-null float64 45 interceptions 2173 non-null float64 46 mid_tackels 2173 non-null float64 47 pass_blk 2173 non-null float64 48 shot_blk 2173 non-null float64 49 shot_save 2173 non-null float64 50 tackels 2173 non-null float64 51 total_mistakes 2173 non-null float64 52 w_tackels 2173 non-null float64 53 2y_cards 2173 non-null float64 54 air_tackels_loss 2173 non-null float64 55 air_tackels_won 2173 non-null float64 56 air_tackels_won_% 1931 non-null float64 57 born 2173 non-null float64 58 dribble 2173 non-null float64 59 dribble_completed 2173 non-null float64 60 dribble_to_goal 2173 non-null float64 61 earned_fouls 2173 non-null float64 62 fouls_commited 2173 non-null float64 63 offsides 2173 non-null float64 64 own_gls 2173 non-null float64 65 shot_created_90 2173 non-null float64 dtypes: float64(61), object(5) memory usage: 1.1+ MB
df_players = df_players.sort_values(by=["value"],ascending=False)
df_players = df_players.reset_index(drop=True)
df_players[["name","mp","league","gls","ast","value"]]
| name | mp | league | gls | ast | value | |
|---|---|---|---|---|---|---|
| 0 | Erling Haaland | 24.0 | de Bundesliga | 22.0 | 8.0 | 165.000 |
| 1 | Vinicius Júnior | 35.0 | es La Liga | 17.0 | 10.0 | 110.000 |
| 2 | Phil Foden | 28.0 | eng Premier League | 9.0 | 5.0 | 99.000 |
| 3 | Harry Kane | 37.0 | eng Premier League | 17.0 | 9.0 | 99.000 |
| 4 | Mohamed Salah | 35.0 | eng Premier League | 23.0 | 13.0 | 99.000 |
| ... | ... | ... | ... | ... | ... | ... |
| 2168 | Stephan Fürstner | 1.0 | de Bundesliga | 0.0 | 0.0 | 0.083 |
| 2169 | Ebenezer Annan | 1.0 | it Serie A | 0.0 | 0.0 | 0.083 |
| 2170 | Alessandro Berardi | 1.0 | it Serie A | 0.0 | 0.0 | 0.055 |
| 2171 | Davide Marfella | 1.0 | it Serie A | 0.0 | 0.0 | 0.055 |
| 2172 | Andrei Motoc | 1.0 | it Serie A | 0.0 | 0.0 | 0.028 |
2173 rows × 6 columns
df_players_bck = df_players.copy()
df_players
| name | nation | pos | team | league | age | mp | mp_start | gls | ast | ... | air_tackels_won_% | born | dribble | dribble_completed | dribble_to_goal | earned_fouls | fouls_commited | offsides | own_gls | shot_created_90 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | Erling Haaland | no NOR | ATT | Dortmund | de Bundesliga | 21.0 | 24.0 | 21.0 | 22.0 | 8.0 | ... | 54.9 | 2000.0 | 8.0 | 4.0 | 2.0 | 17.0 | 17.0 | 14.0 | 0.0 | 2.59 |
| 1 | Vinicius Júnior | br BRA | ATT | Real Madrid | es La Liga | 21.0 | 35.0 | 30.0 | 17.0 | 10.0 | ... | 17.4 | 2000.0 | 59.0 | 21.0 | 3.0 | 82.0 | 42.0 | 26.0 | 0.0 | 5.69 |
| 2 | Phil Foden | eng ENG | ATT | Manchester City | eng Premier League | 21.0 | 28.0 | 24.0 | 9.0 | 5.0 | ... | 19.5 | 2000.0 | 59.0 | 3.0 | 0.0 | 38.0 | 17.0 | 13.0 | 0.0 | 3.51 |
| 3 | Harry Kane | eng ENG | ATT | Tottenham | eng Premier League | 28.0 | 37.0 | 36.0 | 17.0 | 9.0 | ... | 47.3 | 1993.0 | 40.0 | 10.0 | 1.0 | 70.0 | 46.0 | 17.0 | 0.0 | 3.26 |
| 4 | Mohamed Salah | eg EGY | ATT | Liverpool | eng Premier League | 29.0 | 35.0 | 30.0 | 23.0 | 13.0 | ... | 22.0 | 1992.0 | 51.0 | 21.0 | 5.0 | 30.0 | 13.0 | 12.0 | 0.0 | 4.33 |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 2168 | Stephan Fürstner | de GER | MID | Mainz 05 | de Bundesliga | 33.0 | 1.0 | 0.0 | 0.0 | 0.0 | ... | NaN | 1987.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.00 |
| 2169 | Ebenezer Annan | gh GHA | DEF | Bologna | it Serie A | 18.0 | 1.0 | 0.0 | 0.0 | 0.0 | ... | NaN | 2002.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.00 |
| 2170 | Alessandro Berardi | it ITA | GK | Hellas Verona | it Serie A | 30.0 | 1.0 | 1.0 | 0.0 | 0.0 | ... | NaN | 1991.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.00 |
| 2171 | Davide Marfella | it ITA | GK | Napoli | it Serie A | 21.0 | 1.0 | 0.0 | 0.0 | 0.0 | ... | NaN | 1999.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.00 |
| 2172 | Andrei Motoc | ro ROU | DEF | Salernitana | it Serie A | 19.0 | 1.0 | 1.0 | 0.0 | 0.0 | ... | 0.0 | 2002.0 | 0.0 | 0.0 | 0.0 | 2.0 | 0.0 | 0.0 | 0.0 | 0.00 |
2173 rows × 66 columns
# Create 4 Dataframe by player position (GK,DEF,MID,ATT)
df_GK = df_players.copy()
df_DEF = df_players.copy()
df_MID = df_players.copy()
df_ATT = df_players.copy()
df_GK = df_GK[df_GK.pos == "GK"]
df_DEF = df_DEF[df_DEF.pos == "DEF"]
df_MID = df_MID[df_MID.pos == "MID"]
df_ATT = df_ATT[df_ATT.pos == "ATT"]
# Sort all dataframe by value
df_GK = df_GK.sort_values(by=["value"],ascending=False)
df_DEF = df_DEF.sort_values(by=["value"],ascending=False)
df_MID = df_MID.sort_values(by=["value"],ascending=False)
df_ATT = df_ATT.sort_values(by=["value"],ascending=False)
# Reset all dataframe index
df_GK = df_GK.reset_index(drop=True)
df_DEF = df_DEF.reset_index(drop=True)
df_MID = df_MID.reset_index(drop=True)
df_ATT = df_ATT.reset_index(drop=True)
# remove unnecessary from each dataframe
df_ATT = df_ATT.drop(columns=["gls","ast","all_pass_dist_forward","gls_shots","mp","dribble_faced","ex_gls","ex_ast",
"dribble_miss_tackels","shot_blk","shot_save","dribble_tackeld_%",
"w_tackels","own_gls","fouls_commited","born","mp_start","gls_no_pen","gls_pen",
"ex_gls_shots_no_pen","dribble"])
df_ATT.shape
(676, 45)
df_MID = df_MID.drop(columns=["mp","gls","ast","ex_gls","ex_ast","gls_no_pen","ex_gls_shots_no_pen",
"gls_shots","dribble_faced","dribble_tackeld","born","dribble"])
df_MID.shape
(546, 54)
df_DEF = df_DEF.drop(columns=["mp","gls","ast","gls_no_pen","ex_gls","ex_ast","ex_gls_shots_no_pen",
"gls_shots","born","dribble"])
df_DEF.shape
(761, 56)
df_players[["name","age","pos","team","value"]].head(10)
| name | age | pos | team | value | |
|---|---|---|---|---|---|
| 0 | Erling Haaland | 21.0 | ATT | Dortmund | 165.0 |
| 1 | Vinicius Júnior | 21.0 | ATT | Real Madrid | 110.0 |
| 2 | Phil Foden | 21.0 | ATT | Manchester City | 99.0 |
| 3 | Harry Kane | 28.0 | ATT | Tottenham | 99.0 |
| 4 | Mohamed Salah | 29.0 | ATT | Liverpool | 99.0 |
| 5 | Kevin De Bruyne | 30.0 | MID | Manchester City | 93.5 |
| 6 | Dušan Vlahović | 21.0 | ATT | Juventus | 93.5 |
| 7 | Trent Alexander-Arnold | 22.0 | DEF | Liverpool | 88.0 |
| 8 | Declan Rice | 22.0 | MID | West Ham | 88.0 |
| 9 | Jude Bellingham | 18.0 | MID | Dortmund | 88.0 |
df_ATT[["name","age","pos","team","value"]].head(5)
| name | age | pos | team | value | |
|---|---|---|---|---|---|
| 0 | Erling Haaland | 21.0 | ATT | Dortmund | 165.0 |
| 1 | Vinicius Júnior | 21.0 | ATT | Real Madrid | 110.0 |
| 2 | Phil Foden | 21.0 | ATT | Manchester City | 99.0 |
| 3 | Harry Kane | 28.0 | ATT | Tottenham | 99.0 |
| 4 | Mohamed Salah | 29.0 | ATT | Liverpool | 99.0 |
df_MID[["name","age","pos","team","value"]].head(5)
| name | age | pos | team | value | |
|---|---|---|---|---|---|
| 0 | Kevin De Bruyne | 30.0 | MID | Manchester City | 93.5 |
| 1 | Joshua Kimmich | 26.0 | MID | Bayern Munich | 88.0 |
| 2 | Declan Rice | 22.0 | MID | West Ham | 88.0 |
| 3 | Jude Bellingham | 18.0 | MID | Dortmund | 88.0 |
| 4 | Sergej Milinković-Savić | 26.0 | MID | Lazio | 77.0 |
df_DEF[["name","age","pos","team","value"]].head(5)
| name | age | pos | team | value | |
|---|---|---|---|---|---|
| 0 | Trent Alexander-Arnold | 22.0 | DEF | Liverpool | 88.0 |
| 1 | Rúben Dias | 24.0 | DEF | Manchester City | 82.5 |
| 2 | Matthijs de Ligt | 21.0 | DEF | Juventus | 77.0 |
| 3 | Alphonso Davies | 20.0 | DEF | Bayern Munich | 77.0 |
| 4 | João Cancelo | 27.0 | DEF | Manchester City | 71.5 |
pd.DataFrame(df_players.groupby("pos").value.mean())
| value | |
|---|---|
| pos | |
| ATT | 12.988299 |
| DEF | 9.713536 |
| GK | 5.786289 |
| MID | 10.540108 |
pd.DataFrame(df_players.groupby(["team", "league"]).value.mean().sort_values(ascending=False).head(5))
| value | ||
|---|---|---|
| team | league | |
| Manchester City | eng Premier League | 42.156190 |
| Chelsea | eng Premier League | 35.893478 |
| Liverpool | eng Premier League | 34.342000 |
| Bayern Munich | de Bundesliga | 32.153846 |
| Atlético Madrid | es La Liga | 31.900000 |
pd.DataFrame(df_players.groupby("team").value.sum().sort_values(ascending=False).head(5))
| value | |
|---|---|
| team | |
| Manchester City | 885.28 |
| Liverpool | 858.55 |
| Bayern Munich | 836.00 |
| Chelsea | 825.55 |
| Real Madrid | 691.02 |
df_players.hist(column="age")
array([[<AxesSubplot:title={'center':'age'}>]], dtype=object)
df_players.plot(x="value",y="age")
plt.show()
plt.figure(figsize=(8,8))
loc=df_players.pos.value_counts()
loc.plot(kind='pie' ,autopct='%.1f',fontsize=12,subplots=True)
plt.title("Player's Positions Distribution %")
plt.ylabel("")
plt.show()
sns.set_theme(color_codes=False)
plt.figure(figsize=(10,6))
sns.regplot(x="age",y="value",data=df_players, x_estimator=np.mean)
plt.show()
df_ATT.describe()
| age | y_cards | r_cards | gls_90 | ast_90 | ex_gls_90 | ex_ast_90 | ex_gls_ast_no_pen_90 | value | ast_minus_ex_ast | ... | total_mistakes | 2y_cards | air_tackels_loss | air_tackels_won | air_tackels_won_% | dribble_completed | dribble_to_goal | earned_fouls | offsides | shot_created_90 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| count | 676.000000 | 676.000000 | 676.000000 | 676.000000 | 676.000000 | 676.000000 | 676.000000 | 676.000000 | 676.000000 | 676.000000 | ... | 676.000000 | 676.000000 | 676.000000 | 676.000000 | 653.000000 | 676.000000 | 676.000000 | 676.000000 | 676.000000 | 676.000000 |
| mean | 24.671598 | 2.202663 | 0.090237 | 0.252101 | 0.161095 | 0.289098 | 0.144882 | 0.411908 | 12.988299 | 0.099556 | ... | 0.050296 | 0.035503 | 32.871302 | 21.343195 | 35.787443 | 2.806213 | 0.402367 | 22.840237 | 5.698225 | 2.727115 |
| std | 4.585177 | 2.280752 | 0.306704 | 0.283125 | 0.711026 | 0.308703 | 0.269526 | 0.394940 | 18.768253 | 1.328597 | ... | 0.225388 | 0.185184 | 31.901418 | 27.525137 | 16.484353 | 3.492556 | 0.793078 | 20.625649 | 6.375467 | 2.120998 |
| min | 15.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.110000 | -3.800000 | ... | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 |
| 25% | 21.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.140000 | 0.070000 | 0.250000 | 2.200000 | -0.500000 | ... | 0.000000 | 0.000000 | 9.000000 | 4.000000 | 26.300000 | 0.000000 | 0.000000 | 6.000000 | 1.000000 | 1.847500 |
| 50% | 24.000000 | 2.000000 | 0.000000 | 0.200000 | 0.100000 | 0.250000 | 0.120000 | 0.370000 | 5.500000 | 0.000000 | ... | 0.000000 | 0.000000 | 25.000000 | 12.000000 | 36.000000 | 2.000000 | 0.000000 | 18.000000 | 4.000000 | 2.480000 |
| 75% | 28.000000 | 3.000000 | 0.000000 | 0.380000 | 0.210000 | 0.370000 | 0.180000 | 0.500000 | 17.600000 | 0.600000 | ... | 0.000000 | 0.000000 | 46.000000 | 26.000000 | 44.400000 | 4.000000 | 1.000000 | 34.000000 | 9.000000 | 3.315000 |
| max | 39.000000 | 12.000000 | 2.000000 | 3.330000 | 18.000000 | 4.480000 | 6.520000 | 6.520000 | 165.000000 | 6.000000 | ... | 2.000000 | 1.000000 | 225.000000 | 251.000000 | 100.000000 | 24.000000 | 5.000000 | 124.000000 | 41.000000 | 36.000000 |
8 rows × 40 columns
df_MID.describe()
| age | mp_start | gls_pen | y_cards | r_cards | gls_90 | ast_90 | ex_gls_90 | ex_ast_90 | ex_gls_ast_no_pen_90 | ... | air_tackels_loss | air_tackels_won | air_tackels_won_% | dribble_completed | dribble_to_goal | earned_fouls | fouls_commited | offsides | own_gls | shot_created_90 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| count | 546.000000 | 546.000000 | 546.000000 | 546.000000 | 546.000000 | 546.00000 | 546.000000 | 546.000000 | 546.000000 | 546.000000 | ... | 546.000000 | 546.000000 | 521.000000 | 546.000000 | 546.000000 | 546.000000 | 546.000000 | 546.000000 | 546.000000 | 546.000000 |
| mean | 25.230769 | 15.300366 | 0.120879 | 3.683150 | 0.150183 | 0.07544 | 0.076245 | 0.092326 | 0.095183 | 0.182399 | ... | 20.809524 | 21.172161 | 46.251440 | 1.173993 | 0.122711 | 22.360806 | 24.983516 | 0.893773 | 0.036630 | 2.089231 |
| std | 4.597351 | 11.049077 | 0.638263 | 3.118511 | 0.405659 | 0.12098 | 0.123187 | 0.223642 | 0.258103 | 0.454040 | ... | 18.383189 | 23.185246 | 17.172994 | 1.954750 | 0.380194 | 19.767266 | 18.727248 | 1.685251 | 0.206622 | 1.817912 |
| min | 15.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.00000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | ... | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 |
| 25% | 22.000000 | 5.000000 | 0.000000 | 1.000000 | 0.000000 | 0.00000 | 0.000000 | 0.030000 | 0.020000 | 0.060000 | ... | 8.000000 | 6.000000 | 38.000000 | 0.000000 | 0.000000 | 7.000000 | 9.000000 | 0.000000 | 0.000000 | 1.182500 |
| 50% | 25.000000 | 15.000000 | 0.000000 | 3.000000 | 0.000000 | 0.03000 | 0.040000 | 0.060000 | 0.060000 | 0.130000 | ... | 17.000000 | 15.000000 | 47.800000 | 0.000000 | 0.000000 | 19.000000 | 22.000000 | 0.000000 | 0.000000 | 1.860000 |
| 75% | 29.000000 | 25.000000 | 0.000000 | 5.000000 | 0.000000 | 0.11000 | 0.117500 | 0.110000 | 0.110000 | 0.210000 | ... | 29.000000 | 29.000000 | 56.800000 | 2.000000 | 0.000000 | 32.000000 | 37.000000 | 1.000000 | 0.000000 | 2.670000 |
| max | 37.000000 | 38.000000 | 7.000000 | 14.000000 | 3.000000 | 1.50000 | 1.700000 | 4.700000 | 4.920000 | 9.630000 | ... | 157.000000 | 192.000000 | 100.000000 | 22.000000 | 3.000000 | 117.000000 | 91.000000 | 13.000000 | 2.000000 | 25.710000 |
8 rows × 49 columns
df_DEF.describe()
| age | mp_start | gls_pen | y_cards | r_cards | gls_90 | ast_90 | ex_gls_90 | ex_ast_90 | ex_gls_ast_no_pen_90 | ... | air_tackels_loss | air_tackels_won | air_tackels_won_% | dribble_completed | dribble_to_goal | earned_fouls | fouls_commited | offsides | own_gls | shot_created_90 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| count | 761.000000 | 761.000000 | 761.000000 | 761.000000 | 761.000000 | 761.000000 | 761.000000 | 761.000000 | 761.000000 | 761.000000 | ... | 761.000000 | 761.000000 | 742.000000 | 761.000000 | 761.000000 | 761.000000 | 761.000000 | 761.000000 | 761.000000 | 761.000000 |
| mean | 25.459921 | 16.825230 | 0.021025 | 3.378449 | 0.176084 | 0.047424 | 0.066518 | 0.054442 | 0.070933 | 0.124652 | ... | 23.959264 | 34.052562 | 55.262938 | 0.671485 | 0.064389 | 14.562418 | 18.927727 | 1.162943 | 0.122208 | 1.363022 |
| std | 4.326027 | 10.963441 | 0.265725 | 2.901226 | 0.429817 | 0.097018 | 0.414848 | 0.105516 | 0.282454 | 0.300206 | ... | 18.268096 | 30.800032 | 16.593508 | 1.304784 | 0.280612 | 13.360059 | 13.524492 | 2.108190 | 0.354732 | 3.554496 |
| min | 16.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | ... | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 |
| 25% | 22.000000 | 7.000000 | 0.000000 | 1.000000 | 0.000000 | 0.000000 | 0.000000 | 0.020000 | 0.010000 | 0.040000 | ... | 9.000000 | 10.000000 | 46.825000 | 0.000000 | 0.000000 | 5.000000 | 8.000000 | 0.000000 | 0.000000 | 0.440000 |
| 50% | 25.000000 | 17.000000 | 0.000000 | 3.000000 | 0.000000 | 0.000000 | 0.000000 | 0.040000 | 0.030000 | 0.080000 | ... | 21.000000 | 26.000000 | 57.100000 | 0.000000 | 0.000000 | 11.000000 | 17.000000 | 0.000000 | 0.000000 | 0.920000 |
| 75% | 29.000000 | 26.000000 | 0.000000 | 5.000000 | 0.000000 | 0.070000 | 0.080000 | 0.060000 | 0.080000 | 0.140000 | ... | 36.000000 | 51.000000 | 65.650000 | 1.000000 | 0.000000 | 21.000000 | 28.000000 | 1.000000 | 0.000000 | 1.640000 |
| max | 38.000000 | 38.000000 | 6.000000 | 16.000000 | 3.000000 | 1.340000 | 11.250000 | 2.160000 | 6.500000 | 6.500000 | ... | 135.000000 | 171.000000 | 100.000000 | 8.000000 | 2.000000 | 91.000000 | 71.000000 | 21.000000 | 2.000000 | 90.000000 |
8 rows × 51 columns
df_ATT[["name", "team","value"]].head(5), df_MID[["name", "team","value"]].head(5),df_DEF[["name", "team","value"]].head(5)
( name team value
0 Erling Haaland Dortmund 165.0
1 Vinicius Júnior Real Madrid 110.0
2 Phil Foden Manchester City 99.0
3 Harry Kane Tottenham 99.0
4 Mohamed Salah Liverpool 99.0,
name team value
0 Kevin De Bruyne Manchester City 93.5
1 Joshua Kimmich Bayern Munich 88.0
2 Declan Rice West Ham 88.0
3 Jude Bellingham Dortmund 88.0
4 Sergej Milinković-Savić Lazio 77.0,
name team value
0 Trent Alexander-Arnold Liverpool 88.0
1 Rúben Dias Manchester City 82.5
2 Matthijs de Ligt Juventus 77.0
3 Alphonso Davies Bayern Munich 77.0
4 João Cancelo Manchester City 71.5)
df_ATT.plot(x="shots_target_%", y="value" ,kind="scatter")
*c* argument looks like a single numeric RGB or RGBA sequence, which should be avoided as value-mapping will have precedence in case its length matches with *x* & *y*. Please use the *color* keyword-argument or provide a 2D array with a single row if you intend to specify the same RGB or RGBA value for all points.
<AxesSubplot:xlabel='shots_target_%', ylabel='value'>
df_ATT.plot(x="value",y=["gls_90","ex_gls_90","shots_target_90","shots_90"])
plt.show()
# ATT Plot gls_90 & ex_gls_90
df_ATT.plot(x="value",y=["gls_90","ex_gls_90"])
plt.show()
# MID Plot gls_90 & ex_gls_90
df_MID.plot(x="value",y=["gls_90","ex_gls_90","ast_90","ex_ast_90"])
plt.show()
# MID dribble and shot created
df_MID.plot(x="value",y=["dribble_completed","shot_created_90"])
plt.show()
# ATT Plot gls_90 & ex_gls_90
df_MID.plot(x="value",y=["tackels","def_tackels","blk"])
plt.show()
#ATT Heatmap
plt.figure(figsize=(30,18))
heatmap = sns.heatmap(df_ATT.corr(), vmin=-1, vmax=1, annot=True )
heatmap.set_title("ATT Correlation Heatmap", fontdict={"fontsize":18});
#MID Heatmap
plt.figure(figsize=(30,18))
heatmap = sns.heatmap(df_MID.corr(), vmin=-1, vmax=1, annot=True )
heatmap.set_title("ATT Correlation Heatmap", fontdict={"fontsize":18});
# DEF Heatmap
plt.figure(figsize=(30,20))
heatmap = sns.heatmap(df_DEF.corr(), vmin=-1, vmax=1, annot=True )
heatmap.set_title("ATT Correlation Heatmap", fontdict={"fontsize":18});
plt.figure(figsize=(30,20))
sns.heatmap(df_ATT.corr(),vmin=-1,vmax=1,linewidths=.5, annot=True );
#plt.yticks(rotation=360)
plt.show()
plt.figure(figsize=(30,20))
sns.heatmap(df_MID.corr(),vmin=-1,vmax=1,linewidths=.5, annot=True );
#plt.yticks(rotation=360)
plt.show()
plt.figure(figsize=(30,20))
sns.heatmap(df_DEF.corr(),vmin=-1,vmax=1,linewidths=.5, annot=True );
#plt.yticks(rotation=360)
plt.show()
# Export ATT, MID, DEF Dataframes for Backup
# Export correlatio table to csv
path = "C:\Python_Projects\CSV"
filename = "df_ATT"
export_csv(df_ATT,path,filename)
# Export correlatio table to csv
path = "C:\Python_Projects\CSV"
filename = "df_MID"
export_csv(df_MID,path,filename)
# Export correlatio table to csv
path = "C:\Python_Projects\CSV"
filename = "df_DEF"
export_csv(df_DEF,path,filename)
df_corr = df_players.corr()
# Export correlatio table to csv
path = "C:\Python_Projects\CSV"
filename = "df_corr"
export_csv(df_corr,path,filename)
df_ATT_learn = df_ATT.copy()
df_ATT_learn = df_ATT_learn.drop(columns=["name","nation","pos","team","league"])
# For linear regression the data can't have NaN values !!
df_ATT_learn_drop = df_ATT_learn.dropna()
print(df_ATT_learn.shape)
(676, 40)
TRAINING_FEATURES_ATT = df_ATT_learn_drop.columns[df_ATT_learn_drop.columns != "value"]
TARGET_FEATURE_ATT = "value"
X = df_ATT_learn_drop[TRAINING_FEATURES_ATT]
y = df_ATT_learn_drop[TARGET_FEATURE_ATT]
X.head()
| age | y_cards | r_cards | gls_90 | ast_90 | ex_gls_90 | ex_ast_90 | ex_gls_ast_no_pen_90 | ast_minus_ex_ast | long_pass_% | ... | total_mistakes | 2y_cards | air_tackels_loss | air_tackels_won | air_tackels_won_% | dribble_completed | dribble_to_goal | earned_fouls | offsides | shot_created_90 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 21.0 | 3.0 | 0.0 | 1.04 | 0.38 | 0.83 | 0.27 | 0.88 | 2.3 | 60.0 | ... | 0.0 | 0.0 | 41.0 | 50.0 | 54.9 | 4.0 | 2.0 | 17.0 | 14.0 | 2.59 |
| 1 | 21.0 | 6.0 | 0.0 | 0.57 | 0.33 | 0.44 | 0.26 | 0.70 | 2.2 | 69.6 | ... | 0.0 | 0.0 | 19.0 | 4.0 | 17.4 | 21.0 | 3.0 | 82.0 | 26.0 | 5.69 |
| 2 | 21.0 | 1.0 | 0.0 | 0.38 | 0.21 | 0.38 | 0.28 | 0.66 | -1.6 | 52.3 | ... | 0.0 | 0.0 | 33.0 | 8.0 | 19.5 | 3.0 | 0.0 | 38.0 | 13.0 | 3.51 |
| 3 | 28.0 | 5.0 | 0.0 | 0.47 | 0.25 | 0.56 | 0.25 | 0.73 | 0.0 | 63.5 | ... | 0.0 | 0.0 | 106.0 | 95.0 | 47.3 | 10.0 | 1.0 | 70.0 | 17.0 | 3.26 |
| 4 | 29.0 | 1.0 | 0.0 | 0.75 | 0.42 | 0.71 | 0.34 | 0.89 | 2.6 | 52.7 | ... | 0.0 | 0.0 | 46.0 | 13.0 | 22.0 | 21.0 | 5.0 | 30.0 | 12.0 | 4.33 |
5 rows × 39 columns
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=32)
print("Initial amount of samples: #{}".format(X.shape[0]))
print("Number of training samples: #{}".format(X_train.shape[0]))
print("Number of test samples: #{}".format(X_test.shape[0]))
print("X_train:")
X_train.head()
Initial amount of samples: #616 Number of training samples: #462 Number of test samples: #154 X_train:
| age | y_cards | r_cards | gls_90 | ast_90 | ex_gls_90 | ex_ast_90 | ex_gls_ast_no_pen_90 | ast_minus_ex_ast | long_pass_% | ... | total_mistakes | 2y_cards | air_tackels_loss | air_tackels_won | air_tackels_won_% | dribble_completed | dribble_to_goal | earned_fouls | offsides | shot_created_90 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 325 | 30.0 | 8.0 | 0.0 | 0.30 | 0.13 | 0.35 | 0.07 | 0.32 | 1.3 | 48.9 | ... | 0.0 | 0.0 | 79.0 | 27.0 | 25.5 | 0.0 | 0.0 | 28.0 | 12.0 | 1.62 |
| 451 | 29.0 | 1.0 | 0.0 | 0.21 | 0.21 | 0.14 | 0.22 | 0.36 | -0.2 | 75.7 | ... | 0.0 | 0.0 | 7.0 | 8.0 | 53.3 | 2.0 | 0.0 | 27.0 | 4.0 | 3.79 |
| 152 | 21.0 | 0.0 | 0.0 | 0.38 | 0.10 | 0.48 | 0.11 | 0.56 | -0.2 | 60.0 | ... | 0.0 | 0.0 | 137.0 | 44.0 | 24.3 | 2.0 | 1.0 | 52.0 | 10.0 | 2.27 |
| 102 | 25.0 | 4.0 | 0.0 | 0.19 | 0.10 | 0.16 | 0.18 | 0.34 | -2.6 | 53.8 | ... | 0.0 | 0.0 | 38.0 | 29.0 | 43.3 | 4.0 | 0.0 | 40.0 | 6.0 | 2.80 |
| 110 | 25.0 | 3.0 | 0.0 | 0.19 | 0.15 | 0.17 | 0.16 | 0.34 | -0.3 | 48.8 | ... | 1.0 | 0.0 | 53.0 | 6.0 | 10.2 | 12.0 | 1.0 | 45.0 | 3.0 | 3.20 |
5 rows × 39 columns
print("y_train:")
y_train.head()
y_train:
325 5.50 451 2.75 152 18.70 102 24.20 110 24.20 Name: value, dtype: float64
ATT_reg = LinearRegression().fit(X_train, y_train)
intercept = ATT_reg.intercept_
print ("score of train = ", ATT_reg.score(X_train, y_train))
print ("intercept of train = ", intercept)
print ("coef of train = ", ATT_reg.coef_)
ATT_reg_pred = ATT_reg.predict(X_test)
score of train = 0.5397079802737892 intercept of train = -21.459308819692428 coef of train = [-1.02975890e+00 -4.00105408e-01 2.68759173e+00 3.39739074e+00 3.69278642e+00 2.21157052e+01 3.01358393e+01 -4.83222675e+00 5.59647787e-01 -2.23680532e-02 1.26640810e-01 5.54282130e-02 1.73547414e-01 3.84623748e-01 7.15691867e-01 -4.61523907e-02 -2.04919105e-01 1.68129380e+00 -1.43869161e-02 -2.94407940e+00 8.44560520e-02 1.17728723e+00 1.86384838e-01 1.35043790e-01 -1.23520376e-01 -5.94237204e-02 -1.22536900e-01 -1.60708901e+00 -6.33774698e-02 -4.41612793e+00 -1.07473691e+00 -8.61696074e-02 2.87548701e-03 4.72996468e-02 1.61287749e+00 -1.15069983e+00 6.25303532e-02 6.91631320e-02 -2.40650427e+00]
pd_diff_ATT = pd.DataFrame(X_test)
pd_diff_ATT["value"] = y_test
pd_diff_ATT["predicted_value"] = ATT_reg_pred
pd_diff_ATT = pd_diff_ATT.reset_index()
pd_diff_ATT[["value","predicted_value"]].head()
| value | predicted_value | |
|---|---|---|
| 0 | 38.50 | 15.688809 |
| 1 | 71.50 | 40.855065 |
| 2 | 2.20 | 23.392093 |
| 3 | 0.22 | 1.064955 |
| 4 | 15.40 | 5.466229 |
pd_diff_ATT = pd_diff_ATT.head(10)
#Plot the comparision of Actual and Predicted Values for Under Predicted
pd_diff_ATT[["value","predicted_value"]].plot(kind='bar',figsize=(15,5))
plt.grid(which='major', linestyle='-', linewidth='0.5', color='green')
plt.grid(which='minor', linestyle=':', linewidth='0.5', color='black')
plt.title("Actual vs Predicted Values for Under Predicted")
plt.xlabel("Player Index")
plt.ylabel('Value')
plt.show()
# Actual Values vs Predicted Values
plt.figure(figsize=(10,6),dpi=80),
plt.style.use('default')
plt.scatter(y, ATT_reg.predict(X))
plt.title ("Actual vs Predicted Value")
plt.ylabel("Predicted Value")
plt.xlabel("Actual Value")
plt.show()
df_MID_learn = df_MID.copy()
#Keep only the numeric columns
df_MID_learn = df_MID_learn.drop(columns=["name","nation","pos","team","league"])
# For linear regression the data can't have NaN values !!
df_MID_learn_drop = df_MID_learn.dropna()
print(df_MID_learn.shape)
(546, 49)
TRAINING_FEATURES_MID = df_MID_learn_drop.columns[df_MID_learn_drop.columns != "value"]
TARGET_FEATURE_MID = "value"
X = df_MID_learn_drop[TRAINING_FEATURES_MID]
y = df_MID_learn_drop[TARGET_FEATURE_MID]
X.head()
| age | mp_start | gls_pen | y_cards | r_cards | gls_90 | ast_90 | ex_gls_90 | ex_ast_90 | ex_gls_ast_no_pen_90 | ... | air_tackels_loss | air_tackels_won | air_tackels_won_% | dribble_completed | dribble_to_goal | earned_fouls | fouls_commited | offsides | own_gls | shot_created_90 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 30.0 | 25.0 | 0.0 | 2.0 | 0.0 | 0.61 | 0.33 | 0.26 | 0.39 | 0.65 | ... | 29.0 | 15.0 | 34.1 | 3.0 | 2.0 | 36.0 | 25.0 | 5.0 | 0.0 | 5.68 |
| 1 | 26.0 | 28.0 | 0.0 | 4.0 | 0.0 | 0.11 | 0.33 | 0.08 | 0.33 | 0.41 | ... | 22.0 | 24.0 | 52.2 | 1.0 | 0.0 | 58.0 | 23.0 | 1.0 | 0.0 | 4.91 |
| 2 | 22.0 | 35.0 | 0.0 | 8.0 | 0.0 | 0.03 | 0.11 | 0.03 | 0.06 | 0.09 | ... | 28.0 | 48.0 | 63.2 | 2.0 | 0.0 | 21.0 | 35.0 | 0.0 | 0.0 | 1.67 |
| 3 | 18.0 | 32.0 | 0.0 | 9.0 | 0.0 | 0.10 | 0.26 | 0.14 | 0.15 | 0.29 | ... | 51.0 | 40.0 | 44.0 | 9.0 | 2.0 | 102.0 | 44.0 | 5.0 | 0.0 | 3.16 |
| 4 | 26.0 | 36.0 | 0.0 | 6.0 | 1.0 | 0.32 | 0.29 | 0.21 | 0.17 | 0.38 | ... | 82.0 | 100.0 | 54.9 | 5.0 | 0.0 | 53.0 | 64.0 | 4.0 | 0.0 | 3.19 |
5 rows × 48 columns
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=32)
print("Initial amount of samples: #{}".format(X.shape[0]))
print("Number of training samples: #{}".format(X_train.shape[0]))
print("Number of test samples: #{}".format(X_test.shape[0]))
print("X_train:")
X_train.head()
Initial amount of samples: #484 Number of training samples: #387 Number of test samples: #97 X_train:
| age | mp_start | gls_pen | y_cards | r_cards | gls_90 | ast_90 | ex_gls_90 | ex_ast_90 | ex_gls_ast_no_pen_90 | ... | air_tackels_loss | air_tackels_won | air_tackels_won_% | dribble_completed | dribble_to_goal | earned_fouls | fouls_commited | offsides | own_gls | shot_created_90 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 56 | 21.0 | 26.0 | 0.0 | 5.0 | 0.0 | 0.00 | 0.00 | 0.04 | 0.06 | 0.10 | ... | 19.0 | 11.0 | 36.7 | 4.0 | 0.0 | 31.0 | 47.0 | 0.0 | 0.0 | 2.20 |
| 404 | 30.0 | 12.0 | 0.0 | 4.0 | 0.0 | 0.00 | 0.00 | 0.02 | 0.01 | 0.03 | ... | 29.0 | 36.0 | 55.4 | 1.0 | 0.0 | 25.0 | 34.0 | 0.0 | 0.0 | 1.07 |
| 424 | 25.0 | 22.0 | 0.0 | 3.0 | 0.0 | 0.14 | 0.05 | 0.11 | 0.04 | 0.15 | ... | 55.0 | 28.0 | 33.7 | 1.0 | 0.0 | 16.0 | 32.0 | 1.0 | 0.0 | 1.10 |
| 47 | 23.0 | 13.0 | 0.0 | 2.0 | 0.0 | 0.00 | 0.09 | 0.03 | 0.05 | 0.08 | ... | 16.0 | 16.0 | 50.0 | 0.0 | 0.0 | 18.0 | 24.0 | 1.0 | 0.0 | 1.13 |
| 233 | 23.0 | 2.0 | 0.0 | 0.0 | 0.0 | 0.00 | 0.30 | 0.08 | 0.12 | 0.20 | ... | 5.0 | 6.0 | 54.5 | 1.0 | 0.0 | 13.0 | 12.0 | 0.0 | 0.0 | 1.81 |
5 rows × 48 columns
print("y_train:")
y_train.head()
y_train:
56 27.50 404 1.98 424 1.65 47 29.70 233 5.50 Name: value, dtype: float64
MID_reg = LinearRegression().fit(X_train, y_train)
intercept = MID_reg.intercept_
print ("score of train = ", MID_reg.score(X_train, y_train))
print ("intercept of train = ", intercept)
print ("coef of train = ", MID_reg.coef_)
MID_reg_pred = MID_reg.predict(X_test)
score of train = 0.5380821704997321 intercept of train = -6.72654051482332 coef of train = [-9.01890891e-01 9.26739230e-01 -1.41520974e+00 -3.49695325e-01 -4.33508980e+00 -6.53610236e+00 3.06360745e+00 3.18108520e+01 3.71582273e+01 -8.14776981e+00 4.93513084e-05 1.05086739e+00 -1.87154631e-02 2.81407509e-02 3.33721083e-01 1.49819561e-01 -4.08311012e-02 2.44690217e+00 -1.28211114e+00 -1.41520974e+00 2.54703425e+00 -1.88238121e-02 1.22629061e+00 -6.19834961e-03 1.40189643e-01 1.40417808e-01 -4.68195603e-01 -1.97981596e-01 1.14592951e-02 3.24260914e-02 -1.15402401e-01 -7.12817165e-02 2.11471359e-01 -8.20310343e-01 1.45230274e-01 3.19701321e+00 2.24699786e-01 3.50431439e+00 -2.87137160e-02 -5.78905678e-02 8.30477513e-02 7.76262354e-01 2.37503511e-02 5.78852477e-02 -4.36712587e-02 1.51563149e+00 -4.47501316e+00 -1.06847390e+00]
pd_diff_MID = pd.DataFrame(X_test)
pd_diff_MID["value"] = y_test
pd_diff_MID["predicted_value"] = MID_reg_pred
pd_diff_MID = pd_diff_MID.reset_index()
pd_diff_MID[["value","predicted_value"]].head()
| value | predicted_value | |
|---|---|---|
| 0 | 6.60 | 3.853452 |
| 1 | 4.07 | 3.052021 |
| 2 | 6.60 | 10.497350 |
| 3 | 7.70 | 28.867395 |
| 4 | 0.55 | 5.164835 |
pd_diff_MID = pd_diff_MID.head(10)
#Plot the comparision of Actual and Predicted Values for Under Predicted
pd_diff_MID[["value","predicted_value"]].plot(kind='bar',figsize=(15,5))
plt.grid(which='major', linestyle='-', linewidth='0.5', color='green')
plt.grid(which='minor', linestyle=':', linewidth='0.5', color='black')
plt.title("Actual vs Predicted Values for Under Predicted")
plt.xlabel("Player Index")
plt.ylabel('Value')
plt.show()
# Actual Values vs Predicted Values
plt.figure(figsize=(10,6),dpi=80),
plt.style.use('default')
plt.scatter(y, MID_reg.predict(X))
plt.title ("Actual vs Predicted Value")
plt.ylabel("Predicted Value")
plt.xlabel("Actual Value")
plt.show()
df_DEF_learn = df_DEF.copy()
df_DEF_learn = df_DEF_learn.drop(columns=["name","nation","pos","team","league"])
# For linear regression the data can't have NaN values !!
df_DEF_learn_drop = df_DEF_learn.dropna()
print(df_DEF_learn.shape)
(761, 51)
TRAINING_FEATURES_DEF = df_DEF_learn_drop.columns[df_DEF_learn_drop.columns != "value"]
TARGET_FEATURE_DEF = "value"
X = df_DEF_learn_drop[TRAINING_FEATURES_DEF]
y = df_DEF_learn_drop[TARGET_FEATURE_DEF]
X.head()
| age | mp_start | gls_pen | y_cards | r_cards | gls_90 | ast_90 | ex_gls_90 | ex_ast_90 | ex_gls_ast_no_pen_90 | ... | air_tackels_loss | air_tackels_won | air_tackels_won_% | dribble_completed | dribble_to_goal | earned_fouls | fouls_commited | offsides | own_gls | shot_created_90 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 22.0 | 32.0 | 0.0 | 2.0 | 0.0 | 0.06 | 0.38 | 0.08 | 0.35 | 0.44 | ... | 22.0 | 18.0 | 45.0 | 5.0 | 0.0 | 9.0 | 16.0 | 11.0 | 0.0 | 4.73 |
| 1 | 24.0 | 27.0 | 0.0 | 5.0 | 0.0 | 0.07 | 0.15 | 0.08 | 0.09 | 0.17 | ... | 36.0 | 53.0 | 59.6 | 0.0 | 0.0 | 10.0 | 30.0 | 2.0 | 0.0 | 1.12 |
| 2 | 21.0 | 29.0 | 0.0 | 4.0 | 1.0 | 0.10 | 0.03 | 0.05 | 0.02 | 0.07 | ... | 51.0 | 109.0 | 68.1 | 0.0 | 0.0 | 17.0 | 32.0 | 2.0 | 0.0 | 0.64 |
| 3 | 20.0 | 20.0 | 0.0 | 3.0 | 0.0 | 0.00 | 0.16 | 0.09 | 0.21 | 0.30 | ... | 16.0 | 15.0 | 48.4 | 7.0 | 1.0 | 31.0 | 15.0 | 3.0 | 0.0 | 3.10 |
| 4 | 27.0 | 36.0 | 0.0 | 7.0 | 0.0 | 0.03 | 0.20 | 0.12 | 0.14 | 0.26 | ... | 45.0 | 49.0 | 52.1 | 7.0 | 1.0 | 37.0 | 37.0 | 2.0 | 0.0 | 2.87 |
5 rows × 50 columns
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=32)
print("Initial amount of samples: #{}".format(X.shape[0]))
print("Number of training samples: #{}".format(X_train.shape[0]))
print("Number of test samples: #{}".format(X_test.shape[0]))
print("X_train:")
X_train.head()
Initial amount of samples: #670 Number of training samples: #536 Number of test samples: #134 X_train:
| age | mp_start | gls_pen | y_cards | r_cards | gls_90 | ast_90 | ex_gls_90 | ex_ast_90 | ex_gls_ast_no_pen_90 | ... | air_tackels_loss | air_tackels_won | air_tackels_won_% | dribble_completed | dribble_to_goal | earned_fouls | fouls_commited | offsides | own_gls | shot_created_90 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 391 | 22.0 | 12.0 | 0.0 | 5.0 | 0.0 | 0.00 | 0.08 | 0.04 | 0.05 | 0.09 | ... | 31.0 | 57.0 | 64.8 | 0.0 | 0.0 | 16.0 | 29.0 | 1.0 | 0.0 | 0.61 |
| 322 | 20.0 | 5.0 | 0.0 | 2.0 | 0.0 | 0.00 | 0.00 | 0.04 | 0.00 | 0.04 | ... | 9.0 | 19.0 | 67.9 | 0.0 | 0.0 | 4.0 | 6.0 | 0.0 | 1.0 | 0.78 |
| 46 | 24.0 | 37.0 | 0.0 | 6.0 | 0.0 | 0.03 | 0.03 | 0.03 | 0.01 | 0.04 | ... | 53.0 | 143.0 | 73.0 | 0.0 | 0.0 | 22.0 | 41.0 | 2.0 | 0.0 | 0.16 |
| 150 | 25.0 | 9.0 | 0.0 | 3.0 | 0.0 | 0.00 | 0.21 | 0.06 | 0.26 | 0.32 | ... | 11.0 | 10.0 | 47.6 | 0.0 | 0.0 | 8.0 | 22.0 | 0.0 | 0.0 | 3.80 |
| 559 | 27.0 | 20.0 | 0.0 | 4.0 | 0.0 | 0.05 | 0.00 | 0.02 | 0.00 | 0.03 | ... | 25.0 | 24.0 | 49.0 | 0.0 | 0.0 | 25.0 | 29.0 | 0.0 | 0.0 | 0.38 |
5 rows × 50 columns
print("y_train:")
y_train.head()
y_train:
391 4.40 322 5.50 46 33.00 150 16.50 559 1.98 Name: value, dtype: float64
DEF_reg = LinearRegression().fit(X_train, y_train)
intercept = DEF_reg.intercept_
print ("score of train = ", DEF_reg.score(X_train, y_train))
print ("intercept of train = ", intercept)
print ("coef of train = ", DEF_reg.coef_)
DEF_reg_pred = DEF_reg.predict(X_test)
score of train = 0.5000401680589183 intercept of train = -10.66990208067255 coef of train = [-9.31599885e-01 6.99698259e-01 6.79909308e-01 -2.17453424e-03 -1.64618872e-01 -6.77384256e+00 9.58569605e+00 -4.22420941e+01 -3.03735924e+01 3.98938721e+01 1.08024828e-03 6.54974225e-02 -8.18289252e-02 -1.23461362e-01 5.72100829e-01 4.31170577e-02 -1.71842210e-03 1.71813328e+00 -6.52514808e-01 6.79909304e-01 1.51160230e+00 2.61817622e-02 1.71197356e+00 3.02397464e-02 -1.08121537e-02 -5.84937845e-02 -6.45146611e-03 -1.19487349e-01 -1.50552598e-01 3.10652491e-02 1.46845816e-02 -2.13387513e-02 1.52267911e-01 -1.11896031e-01 1.01083877e-01 -7.25077141e-01 8.28446871e-02 1.11448818e-02 -8.17945106e-03 -4.07886888e-01 -2.84219105e-02 1.66322587e-01 4.06900489e-02 1.09938536e+00 6.30533403e+00 1.93291647e-02 -1.38540580e-01 9.28633504e-02 -2.60653179e-01 1.50994395e+00]
pd_diff_DEF = pd.DataFrame(X_test)
pd_diff_DEF["value"] = y_test
pd_diff_DEF["predicted_value"] = def_reg_pred
pd_diff_DEF = pd_diff_DEF.reset_index()
pd_diff_DEF[["value","predicted_value"]].head()
| value | predicted_value | |
|---|---|---|
| 0 | 1.76 | 7.328970 |
| 1 | 33.00 | 30.950015 |
| 2 | 8.80 | 20.052935 |
| 3 | 2.20 | 4.247398 |
| 4 | 3.30 | 9.828126 |
pd_diff_DEF = pd_diff_DEF.head(10)
#Plot the comparision of Actual and Predicted Values for Under Predicted
pd_diff_DEF[["value","predicted_value"]].plot(kind='bar',figsize=(15,5))
plt.grid(which='major', linestyle='-', linewidth='0.5', color='green')
plt.grid(which='minor', linestyle=':', linewidth='0.5', color='black')
plt.title("Actual vs Predicted Values for Under Predicted")
plt.xlabel("Player Index")
plt.ylabel('Value')
plt.show()
# Actual Values vs Predicted Values
plt.figure(figsize=(10,6),dpi=80),
plt.style.use('default')
plt.scatter(y, DEF_reg.predict(X))
plt.title ("Actual vs Predicted Value")
plt.ylabel("Predicted Value")
plt.xlabel("Actual Value")
plt.show()